zeus
1 year ago
1 changed files with 178 additions and 0 deletions
@ -0,0 +1,178 @@ |
|||
#!/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 |
Loading…
Reference in new issue