diff --git a/plugins/podmanRun/podmanRunWrapper b/plugins/podmanRun/podmanRunWrapper index 75598bb..e958c1b 100755 --- a/plugins/podmanRun/podmanRunWrapper +++ b/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