You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
4.3 KiB
178 lines
4.3 KiB
#!/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
|
|
|