You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.1 KiB
133 lines
4.1 KiB
#compdef vagrant |
|
#autoload |
|
|
|
# vagrant zsh completion |
|
|
|
local -a _1st_arguments |
|
_1st_arguments=( |
|
'box:Box commands' |
|
'cloud:Manages everything related to Vagrant Cloud' |
|
'connect:Connects to a remotely shared Vagrant environment' |
|
'destroy:Destroys the vagrant environment' |
|
'docker-logs:Outputs the logs from the Docker container' |
|
'docker-run:Run a one-off command in the context of a container' |
|
'global-status:Reports the status of all active Vagrant environments on the system' |
|
'halt:Halts the currently running vagrant environment' |
|
'help:Shows the help for a subcommand' |
|
'init:[box_name] [box_url] Initializes current folder for Vagrant usage' |
|
'list-commands:Outputs all available Vagrant subcommands, even non-primary ones' |
|
'login:Authenticates against a Vagrant Cloud server to access protected boxes' |
|
'package:Packages a vagrant environment for distribution' |
|
'plugin:Plugin commands' |
|
'port:Displays information about guest port mappings' |
|
'provision:Run the provisioner' |
|
'push:Deploys code in this environment to a configured destination' |
|
'rdp:Connects to machine via RDP' |
|
'reload:Reload the vagrant environment' |
|
'resume:Resumes a suspended vagrant environment' |
|
'rsync:Syncs rsync synced folders to remote machine' |
|
'rsync-auto:Syncs rsync synced folders automatically when files change' |
|
'share:Shares your Vagrant environment with anyone in the world' |
|
'snapshot:Manage snapshots with the guest machine' |
|
'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' |
|
'snapshot:Used to manage snapshots with the guest machine' |
|
'up:Creates the vagrant environment' |
|
'validate:Validates the Vagrantfile' |
|
'version:Prints current and latest Vagrant version' |
|
'--help:[TASK] Describe available tasks or one specific task' |
|
'--version:Prints the Vagrant version information' |
|
) |
|
|
|
local -a _box_arguments |
|
_box_arguments=( |
|
'add:ADDRESS Adds a box to the system' |
|
'help:COMMAND List subcommands' |
|
'list:Lists all installed boxes' |
|
'outdated:Checks if a box has newer version' |
|
'remove:NAME Removes a box from the system' |
|
'repackage:NAME PROVIDER VERSION Repackages an installed box into a `.box` file' |
|
'update:Updates box to a newer version, if available' |
|
) |
|
|
|
__task_list () |
|
{ |
|
local expl |
|
declare -a tasks |
|
|
|
tasks=(box destroy halt init package port 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 | sed -e 's/ /\\ /g') |
|
} |
|
|
|
__vm_list () |
|
{ |
|
_wanted application expl 'command' compadd $(command grep Vagrantfile -oe '^[^#]*\.vm\.define *[:"]\([a-zA-Z0-9_-]\+\)' 2>/dev/null | awk '{print substr($2, 2)}') |
|
_wanted application expl 'command' compadd $(command ls .vagrant/machines/ 2>/dev/null) |
|
} |
|
|
|
__vagrant-box () |
|
{ |
|
local curcontext="$curcontext" state line |
|
typeset -A opt_args |
|
|
|
_arguments -C \ |
|
':command:->command' \ |
|
'*::options:->options' |
|
|
|
case $state in |
|
(command) |
|
_describe -t commands "vagrant subcommand" _box_arguments |
|
return |
|
;; |
|
|
|
(options) |
|
case $line[1] in |
|
(repackage|remove) |
|
_arguments ':feature:__box_list' |
|
;; |
|
esac |
|
;; |
|
esac |
|
} |
|
|
|
|
|
|
|
|
|
local expl |
|
local -a boxes installed_boxes |
|
|
|
local curcontext="$curcontext" state line |
|
typeset -A opt_args |
|
|
|
_arguments -C \ |
|
':command:->command' \ |
|
'*::options:->options' |
|
|
|
case $state in |
|
(command) |
|
_describe -t commands "vagrant subcommand" _1st_arguments |
|
return |
|
;; |
|
|
|
(options) |
|
case $line[1] in |
|
(help) |
|
_arguments ':feature:__task_list' |
|
;; |
|
|
|
(box) |
|
__vagrant-box |
|
;; |
|
(up|provision|port|package|destroy|reload|ssh|ssh-config|halt|resume|status) |
|
_arguments ':feature:__vm_list' |
|
esac |
|
;; |
|
esac
|
|
|