#compdef vagrant # ------------------------------------------------------------------------------ # Description # ----------- # # Completion script for Vagrant (http://vagrantup.com). # # Source: https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/vagrant # # ------------------------------------------------------------------------------ # Authors # ------- # # * Nikita Fedyashev (https://github.com/nfedyashev) # * Mark Cornick (https://github.com/markcornick) # # ------------------------------------------------------------------------------ local -a _1st_arguments _1st_arguments=( 'box:Box commands' 'destroy:Destroys the vagrant environment' 'global-status:Shows the status of the global Vagrant environment.' 'halt:Halts the currently running vagrant environment' 'help:[TASK] Describe available tasks or one specific task' 'init:[box_name] [box_url] Initializes current folder for Vagrant usage' 'package:Packages a vagrant environment for distribution' 'plugin:Manage plugins' 'provision:Run the provisioner' 'reload:Reload the vagrant environment' 'resume:Resumes a suspend vagrant environment' 'ssh:SSH into the currently running environment' 'ssh-config:outputs .ssh/config valid syntax for connecting to this environment via ssh.' 'status:Shows the status of the current Vagrant environment.' 'suspend:Suspends the currently running vagrant environment' 'up:Creates the vagrant environment' 'version:Prints the Vagrant version information' ) local -a _box_arguments _box_arguments=( 'add:NAME URI Add a box to the system' 'help:COMMAND Describe subcommands or one specific subcommand' 'list:Lists all installed boxes' 'remove:NAME Remove a box from the system' 'repackage:NAME Repackage an installed box into a `.box` file.' ) local -a _plugin_arguments _plugin_arguments=( 'install:NAME Install a plugin to the system' 'license:NAME LICENSE_FILE Add a license for an installed plugin' 'list:Lists all installed plugins' 'uninstall:NAME Uninstall a plugin from the system' 'update:[NAMES...] Update all or specified plugins' ) __task_list () { local expl local -a tasks tasks=(box destroy global-status halt init package plugin provision \ reload resume ssh ssh_config status suspend up version) _wanted tasks expl 'help' compadd $tasks } __box_list () { _wanted application expl 'command' compadd $(command vagrant box list | \ awk '{print $1}' | \ sed -e 's/ /\\ /g') } __plugin_list () { _wanted application expl 'command' compadd $(command vagrant plugin list \ 2>/dev/null| cut -d' ' -f1) } _vagrant_caching_policy() { local reg_time comp_time check_file case "${1##*/}" in VAGRANT_VMS) if [[ -z $VAGRANT_CWD ]]; then check_file=./Vagrantfile else check_file=$VAGRANT_CWD/Vagrantfile fi ;; *) echo "unknown type: $1" return -1 ;; esac case $(uname -s) in Darwin) STATCMD="stat -f '%c'" ;; *) STATCMD="stat -c '%Z'" ;; esac reg_time=${$(${(z)STATCMD} $check_file):Q} comp_time=${$(${(z)STATCMD} $1):Q} return $(( reg_time < comp_time )) } __vm_list () { local cache_policy zstyle -s ":completion:${curcontext}:" cache-policy cache_policy zstyle ":completion:${curcontext}:" cache-policy \ ${cache_policy:-_vagrant_caching_policy} # Cache the list of VMs available if ( [[ ${+_vagrant_vms} -eq 0 ]] || _cache_invalid VAGRANT_VMS ) && ! _retrieve_cache VAGRANT_VMS; then _vagrant_vms=( $(_call_program path-all "vagrant status | \ awk '{print \$1}' | \ egrep -v '^$|^(Current|This|above|VM,)$'" ) ) _store_cache VAGRANT_VMS _vagrant_vms fi _wanted application expl 'command' compadd $_vagrant_vms } __vagrant-box () { local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gem subcommand" _box_arguments return ;; (options) case $line[1] in (repackage|remove) _arguments ':feature:__box_list' ;; esac ;; esac } __vagrant-plugin () { local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gem subcommand" _plugin_arguments return ;; (options) case $line[1] in (license) _arguments ':feature:__plugin_list' '*:file:_files' ;; (uninstall) _arguments ':feature:__plugin_list' ;; esac ;; esac } local expl local -a boxes installed_boxes local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gem subcommand" _1st_arguments return ;; (options) case $line[1] in (help) _arguments ':feature:__task_list' ;; (box) __vagrant-box ;; (plugin) __vagrant-plugin ;; (up|provision|package|destroy|reload|ssh|halt|resume|status|suspend) _arguments ':feature:__vm_list' esac ;; esac # Local Variables: # mode: Shell-Script # sh-indentation: 2 # indent-tabs-mode: nil # sh-basic-offset: 2 # End: # vim: ft=zsh sw=2 ts=2 et