enhancements to mocha-suv making it easier to work with LXC and Docker containers

This commit is contained in:
Michael Becker 2025-03-25 10:50:54 -04:00
parent dc73aa32cb
commit 4ac1df4558
2 changed files with 181 additions and 15 deletions

View File

@ -6,12 +6,140 @@
# mocha suv new
USE_VAGRANT="false"
VAGRANT_MOCHADIR=/home/beckermj/Documents/Vagrant/mocha
VAGRANT_MOCHADIR=~/Documents/Vagrant/mocha
VAGRANT_MACHINESDIR=$VAGRANT_MOCHADIR/machines
VAGRANT_VMS=""
if [ -d $VAGRANT_MACHINESDIR ]; then
VAGRANT_VMS=$(ls $VAGRANT_MACHINESDIR)
fi
VBOX_VMS=$(VBoxManage list vms | grep 'mochasuv-')
LXC_VMS=$(lxc list -c n -f csv | grep i-0)
# DOCKER_VMS=$(docker container ls --filter network=mocha-docker --format "{{.Names}}/")
DOCKER_VMS_STOPPED=$(docker container ls --filter network=mocha-docker --filter status=exited --format "{{.Names}}")
DOCKER_VMS_RUNNING=$(docker container ls --filter network=mocha-docker --filter status=running --format "{{.Names}}")
if [ "$1" == "list" ]; then
ls $VAGRANT_MACHINESDIR
# first list all the Vagrant machines (ancient, unsupported... but for backwards compatibility)
if [ "$VAGRANT_VMS" != "" ]; then
echo $VAGRANT_VMS
fi
# then list all the LXC machines
if [ "$LXC_VMS" != "" ]; then
echo $LXC_VMS
fi
# finally, list all the Docker machines
if [ "$DOCKER_VMS_RUNNING" != "" ]; then
echo $DOCKER_VMS_RUNNING
fi
if [ "$DOCKER_VMS_STOPPED" != "" ]; then
echo $DOCKER_VMS_STOPPED
fi
elif [ "$1" == "status" ]; then
FORMAT="table"
if [ "$2" == "-f" ]; then
FORMAT=$3
shift; shift
fi
if [ "$2" == "" ]; then
if [ "$FORMAT" == "table" ]; then
echo "+----------------------------+-----------+---------+"
echo "| NAME | TYPE | STATUS |"
echo "+----------------------------+-----------+---------+"
fi
for name in $(mocha suv list); do
mocha suv status -f $FORMAT $name
if [ "$FORMAT" == "table" ]; then
echo "+----------------------------+-----------+---------+"
fi
done
# if [ "$FORMAT" == "table" ]; then
# echo "+----------------------------+--------+---------+"
# fi
else
EXISTS_VAGRANT=$(echo "$VAGRANT_VMS" | grep $2)
EXISTS_VBOX=$(echo "$VBOX_VMS" | grep $2)
EXISTS_LXC=$(echo "$LXC_VMS" | grep $2)
EXISTS_DOCKER_STOPPED=$(echo "$DOCKER_VMS_STOPPED" | grep $2)
EXISTS_DOCKER_RUNNING=$(echo "$DOCKER_VMS_RUNNING" | grep $2)
if [ "$EXISTS_VAGRANT" != "" ]; then
if [ "$FORMAT" == "csv" ]; then
echo "$2,vagrant,unknown"
else
echo "| $2 | vagrant | unknown |"
fi
elif [ "$EXISTS_VBOX" != "" ]; then
if [ "$FORMAT" == "csv" ]; then
echo "$2,vbox,unknown"
else
echo "| $2 | vbox | unknown |"
fi
elif [ "$EXISTS_LXC" != "" ]; then
EXISTS_LXC_STOPPED=$(lxc list -f csv | grep STOPPED | grep $2)
if [ "$EXISTS_LXC_STOPPED" ]; then
if [ "$FORMAT" == "csv" ]; then
echo "$2,lxc,stopped"
else
# i-00000000000000000 docker
echo "| $2 | lxc | stopped |"
fi
else
if [ "$FORMAT" == "csv" ]; then
echo "$2,lxc,running"
else
# i-00000000000000000 docker
echo "| $2 | lxc | running |"
fi
fi
elif [ "$EXISTS_DOCKER_STOPPED" != "" ]; then
if [ "$FORMAT" == "csv" ]; then
echo "$2,docker,stopped"
else
# i-00000000000000000 docker
echo "| $2 | docker | stopped |"
fi
elif [ "$EXISTS_DOCKER_RUNNING" != "" ]; then
if [ "$FORMAT" == "csv" ]; then
echo "$2,docker,running"
else
# i-00000000000000000 docker
echo "| $2 | docker | running |"
fi
fi
fi
elif [ "$1" == "up" ]; then
@ -28,8 +156,37 @@ elif [ "$1" == "up" ]; then
else
EXISTS=$(VBoxManage list vms | grep 'mochasuv-$2')
if [ "$EXISTS" != "" ]; then
# is VBox VM
VBoxHeadless --startvm "mochasuv-$2" &
else
EXISTS=$(echo "$LXC_VMS" | grep $2)
if [ "$EXISTS" != "" ]; then
# LXC container found, start it
lxc start $2
else
# last chance, maybe we used Docker
EXISTS=$(echo "$DOCKER_VMS_STOPPED" | grep $2)
if [ "$EXISTS" != "" ]; then
docker container start $2
else
exit 127
fi
fi
fi
fi
else
echo "usage: mocha suv up MACHINENAME"
@ -73,6 +230,13 @@ elif [ "$1" == "shell" ]; then
echo "unknown machine named $2"
fi
else
EXISTS_DOCKER=$(echo "$DOCKER_VMS_RUNNING" | grep $2)
if [ "$EXISTS_DOCKER" != "" ]; then
docker container exec -it $2 bash
else
if [ "$#" == "2" ]; then
@ -90,6 +254,8 @@ elif [ "$1" == "shell" ]; then
fi
fi
else
echo "usage: mocha suv shell MACHINENAME"
fi

View File

@ -24,7 +24,7 @@ _mocha()
return 0
;;
up|down|delete|shell|status)
COMPREPLY=( $( compgen -W "$(ls /home/beckermj/Documents/Vagrant/mocha/machines)" -- "$cur" ) )
COMPREPLY=( $( compgen -W "$(mocha suv list)" -- "$cur" ) )
return 0
;;
esac