Explorar o código

Simplify __main() logic

cryobry %!s(int64=4) %!d(string=hai) anos
pai
achega
1d3bbe441d
Modificáronse 2 ficheiros con 63 adicións e 47 borrados
  1. 12 0
      functions
  2. 51 47
      plugins/podmanRun/podmanRunWrapper

+ 12 - 0
functions

@@ -105,3 +105,15 @@ fixPermissions () {
     # Allow container access to the workdir (SELinux)
     chcon -t container_file_t -R "$1"
 }
+
+
+debug () {
+
+    [[ -n $_debug ]] && echo "debug: " "$@"
+}
+
+
+silent () {
+
+    [[ -z $_silent ]] && echo "$@"
+}

+ 51 - 47
plugins/podmanRun/podmanRunWrapper

@@ -1,29 +1,29 @@
 #!/usr/bin/env bash
 # shellcheck disable=SC1090,SC2004
 
-podmanRunWrapper () {
+podmanRunWrapper() {
 
     ########################
     ###### FUNCTIONS #######
     ########################
 
-    _printHelpAndExit () {
+    _printHelpAndExit() {
 
         if [[ -z $_debug ]]; then
             cat <<-'EOF'
 USAGE
     Argument mode:
-        podman-run-wrapper -m MODE -o OPTIONS -i IMAGE [-n CONTAINER_NAME]
-        [--help] [--silent] [--debug] [COMMANDS [ARGS...]]
+        podmanRunWrapper -m MODE -o OPTIONS -i IMAGE [-n CONTAINER_NAME] [--help]
+        [--debug] [COMMANDS [ARGS...]]
 
     Array mode (bash >= 4.3):
-        podman-run-wrapper -a ARRAY
+        podmanRunWrapper -a ARRAY
 
 EXAMPLE
-    podman-run-wrapper -m ephemeral -o "-it -v $PWD:$PWD -w $PWD" -i "php:latest" -c "php ./script.php"
+    podmanRunWrapper -m ephemeral -o "-it -v $PWD:$PWD -w $PWD" -i "php:latest" -c "php ./script.php"
 
     ARRAY=( "-m" "ephemeral" "-o" "--rm -it -v $PWD:$PWD -w $PWD" "-i" "php:latest" "-c" "php ./script.php")
-    podman-run-wrapper -a ARRAY
+    podmanRunWrapper -a ARRAY
 
 COMMANDS
     COMMANDS to run in the container (e.g. the current active file, an external build script, a
@@ -37,7 +37,6 @@ OPTIONS
             1. ephemeral
             2. persistent
             3. recreate-persistent
-            4. remove-persistent
 
     --options, -o OPTIONS
         OPTIONS to pass directly to `podman run` or `podman exec` depending on the mode or
@@ -65,9 +64,6 @@ OPTIONS
     --selinuxfix
         A temporary hack to grant SELinux write access on $PWD until a better fix is found
 
-    --silent, -s
-        Only print errors
-
     --debug, -d
         Print debugging
 
@@ -83,12 +79,12 @@ EOF
 
 
     # Parse input
-    _parseInput () {
+    _parseInput() {
 
         unset _mode _cmds_arr _opts_arr _options _prw_opts_arr _image _name _array _selinux_fix
 
         # Use getopt to print help
-        if INPUT=$(getopt -o +m:o:i:x:n:a:sdh -l mode:,options:,image:,name:,array:,optionsarray:,commandsarray:,selinuxfix,silent,debug,help -- "$@"); then
+        if INPUT=$(getopt -o +m:o:i:x:n:a:dh -l mode:,options:,image:,name:,array:,optionsarray:,commandsarray:,selinuxfix,debug,help -- "$@"); then
             eval set -- "$INPUT"
             while true; do
                 case "$1" in
@@ -126,11 +122,8 @@ EOF
                     --help|-h)
                         _printHelpAndExit 0
                         ;;
-                    --silent|-s)
-                        _silent="1"
-                        ;;
                     --debug|-d)
-                        _debug="1"
+                        export _debug="1"
                         echo "Debugging on!"
                         ;;
                     --)
@@ -178,16 +171,16 @@ EOF
             declare -ga _prw_cmds_arr
             _prw_cmds_arr=("$@")
             if [[ ${#_prw_cmds_arr[@]} -lt 1 ]]; then
-                [[ -z $_silent ]] && echo "Warning: running container without any commands"
+                debug "Running container without any commands"
             fi
         fi
 
-        [[ -n $_debug ]] && echo "_prw_opts_arr:" "${_prw_opts_arr[@]}"
-        [[ -n $_debug ]] && echo "_prw_cmds_arr:" "${_prw_cmds_arr[@]}"
+        debug "_prw_opts_arr:" "${_prw_opts_arr[@]}"
+        debug "_prw_cmds_arr:" "${_prw_cmds_arr[@]}"
     }
 
 
-    _addCName () {
+    _addCName() {
 
         # autogenerate _name if missing
         [[ -z $_name ]] && _name="${_image}${_prw_cmds_arr[*]}"
@@ -206,27 +199,24 @@ EOF
     }
 
 
-    _removeContainer () {
+    _removeContainer() {
 
-        if podman container exists "$_cname"; then
-            [[ -z $_silent ]] && echo "Removing container: $_cname"
-            [[ -n $_debug ]] && echo "podman rm -v -f $_cname"
-            podman rm -v -f "$_cname"
+        if podman container exists "$1"; then
+            debug "podman rm -v -f $1"
+            podman rm -v -f "$1"
         fi
     }
 
 
-    _runContainer () {
+    _runContainer() {
 
         # Run _remove_container first to not run in existing container
-        if podman container exists "${_cname}"; then
-            [[ -z $_silent ]] && echo "Reusing container: $_cname"
-            [[ -n $_debug ]] && echo podman exec "$_cname" sh -c "${_prw_cmds_arr[@]}"
-            podman exec "$_cname" sh -c "${_prw_cmds_arr[@]}"
+        if podman container exists "$1"; then
+            debug podman exec "$1" sh -c "${_prw_cmds_arr[@]}"
+            podman exec "$1" sh -c "${_prw_cmds_arr[@]}"
             exit $?
         else
-            [[ -z $_silent ]] && echo "Running in container: $_cname"
-            [[ -n $_debug ]] && echo "Command: podman run" "${_prw_opts_arr[@]}" "$_image" sh -c "${_prw_cmds_arr[@]}"
+            debug "Command: podman run" "${_prw_opts_arr[@]}" "$_image" sh -c "${_prw_cmds_arr[@]}"
             podman run "${_prw_opts_arr[@]}" "$_image" "${_prw_cmds_arr[@]}"
             exit $?
         fi
@@ -237,7 +227,7 @@ EOF
 ####### EXECUTE #########
 #########################
 
-    _execute () {
+    __main() {
 
         # Get input
         _parseInput "$@"
@@ -249,26 +239,40 @@ EOF
         [[ -n $_selinux_fix ]] && fixPermissions "$PWD"
 
         # Execute podman
-        if [[ $_mode == "ephemeral" || $_mode == "recreate-persistent" ]]; then
-            _removeContainer
-            _runContainer
-        elif [[ $_mode == "remove-persistent" ]]; then
-            _removeContainer
-        elif [[ $_mode == "persistent" ]]; then
-            _runContainer
-        else
-            echo "Unknown mode!"
-            _printHelpAndExit 1
+        if [[ "$_mode" =~ ^(ephemeral|recreate-persistent)$ ]]; then
+            _removeContainer "$_cname"
         fi
+
+        _runContainer "$_cname"
     }
 
     # Allow this function to be executed directly
-    _execute "$@"
+    __main "$@"
+    exit $?
 }
 
 # Allow script to be called directly
 if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
-    # No imported functions
-    #source-functions
+
+    _getBaseDir () {
+        # Get base directory name of where this script resides
+        # https://stackoverflow.com/questions/59895/how-to-get-the-source-directory-of-a-bash-script-from-within-the-script-itself#comment54598418_246128
+        _basedir=$(dirname "$(readlink -f "$0")")
+    }
+
+    _sourceFunctions () {
+        # Get the location of this file
+        _getBaseDir
+        # Go up two directories
+        ff="${_basedir%/*/*}/functions"
+        # Source functions file
+        if [[ -f "$ff" ]]; then
+            source "$ff"
+        else
+            echo "Cannot find functions file: ${ff}"
+        fi
+    }
+
+    _sourceFunctions
     podmanRunWrapper "$@"
 fi