#compdef packer _packer () { local -a sub_commands && sub_commands=( 'build:Build image(s) from template' 'fix:Fixes templates from old versions of packer' 'inspect:See components of a template' 'validate:Check that a template is valid' 'version:Prints the Packer version' ) local -a build_arguments && build_arguments=( '-debug[Debug mode enabled for builds.]' '-force[Force a build to continue if artifacts exist, deletes existing artifacts.]' '-machine-readable[Produce machine-readable output.]' '-color=[(false) Disable color output. (Default: color)]' '-except=[(foo,bar,baz) Run all builds and post-processors other than these.]' '-on-error=[(cleanup,abort,ask) If the build fails do: clean up (default), abort, or ask.]' '-only=[(foo,bar,baz) Only build the given builds by name.]' '-parallel=[(false) Disable parallelization. (Default: false)]' '-parallel-builds=[(0) Number of builds to run in parallel. (Defaults to infinite: 0)]' '-var[("key=value") Variable for templates, can be used multiple times.]' '-var-file=[(path) JSON or HCL2 file containing user variables.]' '(-)*:files:_files -g "*.json"' ) local -a inspect_arguments && inspect_arguments=( '-machine-readable[Machine-readable output]' '(-)*:files:_files -g "*.json"' ) local -a validate_arguments && validate_arguments=( '-syntax-only[Only check syntax. Do not verify config of the template.]' '-except=[(foo,bar,baz) Validate all builds other than these.]' '-only=[(foo,bar,baz) Validate only these builds.]' '-var[("key=value") Variable for templates, can be used multiple times.]' '-var-file=[(path) JSON or HCL2 file containing user variables.]' '(-)*:files:_files -g "*.json"' ) _arguments -C \ ':command:->command' \ '*::options:->options' case $state in command) _describe -t commands 'command' sub_commands ;; options) case $line[1] in build) _arguments -s -S : $build_arguments ;; inspect) _arguments -s -S : $inspect_arguments ;; validate) _arguments -s -S : $validate_arguments ;; esac ;; esac } _packer "$@"