Add the "hopon" script.

This commit is contained in:
Josh W 2024-07-12 11:47:23 -04:00
parent 3f5043784b
commit cee33dacef
4 changed files with 78 additions and 0 deletions

View file

@ -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

18
hopon/README.md Normal file
View file

@ -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 <container_or_vm_name>
```
## Install
Run `sudo ./install.sh`

34
hopon/hopon Normal file
View file

@ -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

4
hopon/install.sh Normal file
View file

@ -0,0 +1,4 @@
#/bin/sh
install -m 755 hopon /usr/bin
install -m 755 010_hopon_completion.bash /etc/bash_completion.d