#!/bin/bash # Default values for options scale=1 DOCKERLINUX=/home/${USER}/appl/docker/linux txturl='\033[1;36m' txturl1='\033[0;36m' txtg='\033[0;32m' NOCOLOR='\033[0m' # Function to print usage information function print_usage { #echo "Usage: $0 [OPTION]..." echo "Usage: swarmlab-linux [OPTION]..." echo "Start, stop, scale, help, or connect to a service." echo "" echo "Options:" echo " start Start the service." echo " stop Stop the service." echo " scale=N Scale the service to N instances (default: 1)." echo " help Display this help message." echo " connect Connect to the service." echo "" echo -e ${txtg}" ****************************************** " echo -e "INFO: Sharing Data between Docker Containers " echo -e " -OR- " echo -e " Sharing Data between Host and Docker Containers " echo -e " " echo -e "HOST: /home/${USER}/appl/docker/linux/data" echo -e "Container: /data" echo -e " ****************************************** ${NOCOLOR}" } # ## Function to generate autocompletion options #function generate_options { # local options="start stop scale help connect" # for i in $(seq 1 $(( $# - 1 )) ); do # options=$(echo "$options" | tr " " "\n" | grep "^${!i}" | tr "\n" " ") # done # echo "$options" #} # ## Bash autocompletion #if [[ -n $COMP_LINE ]]; then # COMPREPLY=($(generate_options ${COMP_WORDS[@]})) #else # complete -W "start stop scale help connect" $0 # exit 0 #fi # # Parse command line options if [[ $# -eq 0 ]]; then print_usage exit 1 fi while [[ $# -gt 0 ]]; do case $1 in start) echo "Starting service..." scale=1 ;; stop) echo "Stopping service..." scale=0 if [ -d $DOCKERLINUX ] then #echo "exists" cd $DOCKERLINUX docker compose down else #echo "no exists" mkdir -p $DOCKERLINUX mkdir -p $DOCKERLINUX/data cd $DOCKERLINUX cat << EOF > docker-compose.yml version: "3" services: ubuntu: #container_name: ubuntu volumes: - "${DOCKERLINUX}/data:/data:rw" image: ubuntu restart: on-failure command: ["sleep","infinity"] EOF docker compose down fi ;; scale=*) scale=${1#*=} if ! [[ $scale =~ ^[0-9]+$ ]] || [[ $scale -lt 1 ]]; then echo "Error: scale must be a positive integer." >&2 exit 1 fi ;; scale) if [[ -z $2 ]] || ! [[ $2 =~ ^[0-9]+$ ]] || [[ $2 -lt 1 ]]; then echo "Error: scale must be followed by a positive integer." >&2 exit 1 fi scale=$2 shift ;; help) scale=0 print_usage exit 0 ;; connect) cd $DOCKERLINUX scale=0 echo "Connecting to service..." echo "if there is no current Linux instance, then start one with start or scale=num" echo "Ctrl-c to escape" echo "-----------------------" #docker ps --format "Linux: {{.Names}}" | grep linux-ubuntu | cut -d'-' -f3 | sort rin=$(docker ps --format "Linux: {{.Names}}" | grep linux-ubuntu | cut -d'-' -f3 | sort -n | sed -e ':a;N;s/\n/ /;ba') echo "ID: ${rin}" read -p "Which Linux instance do you want to connect to? Input Selection:" ins docker exec -it linux-ubuntu-${ins} /bin/bash ;; *) echo "Error: invalid option $1." >&2 print_usage >&2 exit 1 ;; esac shift done # Start services #echo "Scale: $scale" if [ ! "$scale" == 0 ] then if [ -d $DOCKERLINUX ] then #echo "exists" cd $DOCKERLINUX docker compose up -d --no-recreate --scale ubuntu=$scale echo "Running Linux Instances..." rin=$(docker ps --format "Linux: {{.Names}}" | grep linux-ubuntu | cut -d'-' -f3 | sort -n | sed -e ':a;N;s/\n/ /;ba') echo "ID: ${rin}" else #echo "no exists" mkdir -p $DOCKERLINUX mkdir -p $DOCKERLINUX/data cd $DOCKERLINUX cat << EOF > docker-compose.yml version: "3" services: ubuntu: #container_name: ubuntu volumes: - "${DOCKERLINUX}/data:/data:rw" image: ubuntu restart: on-failure command: ["sleep","infinity"] EOF docker compose up -d --no-recreate --scale ubuntu=$scale echo "Running Linux:" #docker ps --format "Linux: {{.Names}}" | grep linux-ubuntu | cut -d'-' -f3 | sort -n | sed -e ':a;N;s/\n/ /;ba' rin=$(docker ps --format "Linux: {{.Names}}" | grep linux-ubuntu | cut -d'-' -f3 | sort -n | sed -e ':a;N;s/\n/ /;ba') echo "ID: ${rin}" fi fi