diff --git a/hopon/010_hopon_completion.bash b/hopon/010_hopon_completion.bash new file mode 100644 index 0000000..69bfea4 --- /dev/null +++ b/hopon/010_hopon_completion.bash @@ -0,0 +1,22 @@ +#/usr/bin/env bash + +_hopon_completions () { + # Check to see if a container/VM manager is installed. + local vm_manager="" + if [ -x "$(command -v lxc)" ]; then + vm_manager="lxc" + elif [ -x "$(command -v incus)" ]; then + vm_manager="incus" + else + return + fi + + # We only want one copy of the found parameter. + if [ "${#COMP_WORDS[@]}" != "2" ]; then + return + fi + + COMPREPLY=($(compgen -W "$($vm_manager list -c n -f csv)" -- "${COMP_WORDS[1]}")) +} + +complete -F _hopon_completions hopon diff --git a/hopon/README.md b/hopon/README.md new file mode 100644 index 0000000..5c125e0 --- /dev/null +++ b/hopon/README.md @@ -0,0 +1,18 @@ +# hopon + +A simple bash script for quickly accessing a linux container/VM. Has tab-completion enabled for Bash shells and can detect different container/VM managers. + +## Requirements + +* Bash +* LXD/LXC or Incus + +## Usage + +``` +# hopon +``` + +## Install + +Run `sudo ./install.sh` \ No newline at end of file diff --git a/hopon/hopon b/hopon/hopon new file mode 100644 index 0000000..16dc9a0 --- /dev/null +++ b/hopon/hopon @@ -0,0 +1,34 @@ +#/usr/bin/env bash + +# Check for the first parameter. +if [ -z "$1" ]; then + echo "No container/VM name specified." + exit 2 +fi + +# Check to see if a container/VM manager is installed. +if [ -x "$(command -v lxc)"] ]; then + vm_manager="lxc" +elif [ -x "$(command -v incus)"] ]; then + vm_manager="incus" +else + echo "No suitable container/VM manager detected." + echo "Make sure you have \"lxc\" or \"incus\" installed." + exit 2 +fi + +# Look for the specified container/VM. +exists=$("$vm_manager" list -c n -f csv | grep ^$1 -- 2>/dev/null) + +if [ -n "$exists" ]; then + # The shell will be different depending on the Linux distro used. + IMAGEOS=$("$vm_manager" config get "$1" image.os) + if [ $IMAGEOS = "Alpine" ]; then + "$vm_manager" exec "$1" -- /bin/ash + else + "$vm_manager" exec "$1" -- /bin/bash + fi +else + echo "Container/VM with name \"$1\" does not exist." + exit 2 +fi diff --git a/hopon/install.sh b/hopon/install.sh new file mode 100644 index 0000000..5ff60c8 --- /dev/null +++ b/hopon/install.sh @@ -0,0 +1,4 @@ +#/bin/sh + +install -m 755 hopon /usr/bin +install -m 755 010_hopon_completion.bash /etc/bash_completion.d