From 7df3e8c621482716013d1cd6a11ef54b034b4fc9 Mon Sep 17 00:00:00 2001 From: Roman Dobosz Date: Thu, 9 Apr 2015 21:03:03 +0200 Subject: [PATCH] Added dhcpserver command --- README | 1 + VBoxManage | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/README b/README index cc5a5e0..aaa600d 100644 --- a/README +++ b/README @@ -17,6 +17,7 @@ Current version of script was written and tested against VBoxManage in version - createhd - createvm - debugvm +- dhcpserver - list - showhdinfo - showvminfo diff --git a/VBoxManage b/VBoxManage index 4063fc1..3f35a0f 100644 --- a/VBoxManage +++ b/VBoxManage @@ -7,8 +7,6 @@ # # [1] Sebastian T. Hafner # -# -# [ ] dhcpserver # [ ] discardstate # [ ] export # [ ] extpack @@ -163,6 +161,44 @@ _VBoxManage() { done } + _dhcp_comp() { + local cur=$1 + local list + local item + + list=$(VBoxManage list dhcpservers | \ + grep NetworkName: | \ + sed 's/NetworkName:\s\+//' | \ + sed 's/\s/\\ /g'| \ + tr '\n' '|' | \ + sed 's/|$//') + IFS='|' read -ra list <<< "$list" + + for item in "${list[@]}" + do + [[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item") + done + } + + _hostonlyif_comp() { + local cur=$1 + local list + local item + + list=$(VBoxManage list hostonlyifs | \ + egrep ^Name: | \ + sed 's/Name:\s\+//' | \ + sed 's/\s/\\ /g'| \ + tr '\n' '|' | \ + sed 's/|$//') + IFS='|' read -ra list <<< "$list" + + for item in "${list[@]}" + do + [[ ${item^^} == ${cur^^}* ]] && COMPREPLY+=("$item") + done + } + # Check the COMP_WORDS looking for name of the vm. If name contain space or # is enclosed in quotes, glue name together in variable name. Variable index # will hold the last index of COMP_WORDS array which contain the end of the @@ -654,6 +690,48 @@ _VBoxManage() { fi ;; dhcpserver) + items=(add modify remove) + subcommand=${COMP_WORDS[2]} + if [[ " ${items[@]} " == *" $subcommand "* ]]; then + case "${subcommand}" in + add|modify) + items=(--ip --netmask --lowerip --upperip) + + [[ " ${COMP_WORDS[@]} " != *" --ifname"* && + " ${COMP_WORDS[@]} " != *" --netname"* ]] && + items+=(--netname --ifname) + + [[ " ${COMP_WORDS[@]} " != *" --enable"* && + " ${COMP_WORDS[@]} " != *" --disable"* ]] && + items+=(--enable --disable) + + _get_excluded_items "${items[@]}" + COMPREPLY=( $(compgen -W "$result" -- ${cur}) ) + ;; + remove) + case "${prev}" in + --netname) + COMPREPLY=() + _dhcp_comp ${cur} + ;; + --ifname) + COMPREPLY=() + _hostonlyif_comp ${cur} + ;; + esac + + if [[ " ${COMP_WORDS[@]} " != *" --ifname"* && + " ${COMP_WORDS[@]} " != *" --netname"* ]]; then + items=(--netname --ifname) + _get_excluded_items "${items[@]}" + COMPREPLY=( $(compgen -W "$result" -- ${cur}) ) + fi + ;; + esac + else + [[ ${#COMPREPLY[@]} -eq 0 ]] && \ + COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) ) + fi ;; discardstate) ;;