_terraform 11.5 KB
Newer Older
gkze's avatar
gkze committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#compdef terraform

local -a _terraform_cmds
_terraform_cmds=(
    'apply:Builds or changes infrastructure'
    'destroy:Destroy Terraform-managed infrastructure'
    'get:Download and install modules for the configuration'
    'graph:Create a visual graph of Terraform resources'
    'init:Initializes Terraform configuration from a module'
    'output:Read an output from a state file'
    'plan:Generate and show an execution plan'
    'pull:Refreshes the local state copy from the remote server'
    'push:Uploads the local state to the remote server'
    'refresh:Update local state file against real resources'
    'remote:Configures remote state management'
    'show:Inspect Terraform state or plan'
17
    'taint:Manually forcing a destroy and recreate on the next plan/apply'
gkze's avatar
gkze committed
18
19
20
21
22
23
24
25
26
27
28
    'version:Prints the Terraform version'
)

__apply() {
    _arguments \
        '-backup=[(path) Path to backup the existing state file before modifying. Defaults to the "-state-out" path with ".backup" extension. Set to "-" to disable backup.]' \
        '-input=[(true) Ask for input for variables if not directly set.]' \
        '-no-color[If specified, output will not contain any color.]' \
        '-refresh=[(true) Update state prior to checking for differences. This has no effect if a plan file is given to apply.]' \
        '-state=[(path) Path to read and save state (unless state-out is specified). Defaults to "terraform.tfstate".]' \
        '-state-out=[(path) Path to write state to that is different than "-state". This can be used to preserve the old state.]' \
29
        '-target=[(resource) A Resource Address to target. Operation will be limited to this resource and its dependencies. This flag can be used multiple times.]' \
gkze's avatar
gkze committed
30
31
32
33
34
35
36
        '-var[("foo=bar") Set a variable in the Terraform configuration. This flag can be set multiple times.]' \
        '-var-file=[(path) Set variables in the Terraform configuration from a file. If "terraform.tfvars" is present, it will be automatically loaded if this flag is not specified.]'
}

__destroy() {
    _arguments \
        '-backup=[(path) Path to backup the existing state file before modifying. Defaults to the "-state-out" path with ".backup" extension. Set to "-" to disable backup.]' \
37
38
        '-force[If set, then the destroy confirmation will not be shown.]' \
        '-input=[(true) Ask for input for variables if not directly set.]' \
gkze's avatar
gkze committed
39
40
        '-no-color[If specified, output will not contain any color.]' \
        '-refresh=[(true) Update state prior to checking for differences. This has no effect if a plan file is given to apply.]' \
41
42
43
        '-state=[(path) Path to read and save state (unless state-out is specified). Defaults to "terraform.tfstate".]' \
        '-state-out=[(path) Path to write state to that is different than "-state". This can be used to preserve the old state.]' \
        '-target=[(resource) Instead of affecting "dependencies" will instead also destroy any resources that depend on the target(s) specified.]' \
gkze's avatar
gkze committed
44
45
46
47
48
49
50
51
52
53
54
        '-var[("foo=bar") Set a variable in the Terraform configuration. This flag can be set multiple times.]' \
        '-var-file=[(path) Set variables in the Terraform configuration from a file. If "terraform.tfvars" is present, it will be automatically loaded if this flag is not specified.]'
}

__get() {
    _arguments \
        '-update=[(false) If true, modules already downloaded will be checked for updates and updated if necessary.]'
}

__graph() {
    _arguments \
55
56
57
        '-draw-cycles[Highlight any cycles in the graph with colored edges. This helps when diagnosing cycle errors.]' \
        '-module-depth=[(n) The maximum depth to expand modules. By default this is zero, which will not expand modules at all.]' \
        '-verbose[Generate a verbose, "worst-case" graph, with all nodes for potential operations in place.]'
gkze's avatar
gkze committed
58
59
60
61
62
63
64
65
66
67
68
69
70
}

__init() {
    _arguments \
        '-address=[(url) URL of the remote storage server. Required for HTTP backend, optional for Atlas and Consul.]' \
        '-access-token=[(token) Authentication token for state storage server. Required for Atlas backend, optional for Consul.]' \
        '-backend=[(atlas) Specifies the type of remote backend. Must be one of Atlas, Consul, or HTTP. Defaults to atlas.]' \
        '-name=[(name) Name of the state file in the state storage server. Required for Atlas backend.]' \
        '-path=[(path) Path of the remote state in Consul. Required for the Consul backend.]'
}

__output() {
    _arguments \
71
72
        '-state=[(path) Path to the state file to read. Defaults to "terraform.tfstate".]' \
        '-module=[(module_name) The module path which has needed output. By default this is the root path. Other modules can be specified by a period-separated list.]'
gkze's avatar
gkze committed
73
74
75
76
77
78
}

__plan() {
    _arguments \
        '-backup=[(path) Path to backup the existing state file before modifying. Defaults to the "-state-out" path with" .backup" extension. Set to "-" to disable backup.]' \
        '-destroy[If set, a plan will be generated to destroy all resources managed by the given configuration and state.]' \
79
        '-detailed-exitcode[Return a detailed exit code when the command exits. When provided, this argument changes the exit codes and their meanings to provide more granular information about what the resulting plan contains]' \
gkze's avatar
gkze committed
80
81
82
83
84
85
        '-input=[(true) Ask for input for variables if not directly set.]' \
        '-module-depth=[(n) Specifies the depth of modules to show in the output. This does not affect the plan itself, only the output shown. By default, this is zero. -1 will expand all.]' \
        '-no-color[If specified, output will not contain any color.]' \
        '-out=[(path) Write a plan file to the given path. This can be used as input to the "apply" command.]' \
        '-refresh=[(true) Update state prior to checking for differences.]' \
        '-state=[(statefile) Path to a Terraform state file to use to look up Terraform-managed resources. By default it will use the state "terraform.tfstate" if it exists.]' \
86
        '-target=[(resource) A Resource Address to target. Operation will be limited to this resource and its dependencies. This flag can be used multiple times.]' \
gkze's avatar
gkze committed
87
88
89
90
91
92
        '-var[("foo=bar") Set a variable in the Terraform configuration. This flag can be set multiple times.]' \
        '-var-file=[(path) Set variables in the Terraform configuration from a file. If "terraform.tfvars" is present, it will be automatically loaded if this flag is not specified.]'
}

__push() {
    _arguments \
93
94
95
96
97
98
99
100
        '-atlas-address=[(url) An alternate address to an Atlas instance. Defaults to https://atlas.hashicorp.com.]' \
        '-upload-modules=[(true) If true (default), then the modules being used are all locked at their current checkout and uploaded completely to Atlas. This prevents Atlas from running terraform get for you.]' \
        '-name=[(name) Name of the infrastructure configuration in Atlas. The format of this is: "username/name" so that you can upload configurations not just to your account but to other accounts and organizations. This setting can also be set in the configuration in the Atlas section.]' \
        '-no-color[Disables output with coloring]' \
        '-overwrite=[(foo) Marks a specific variable to be updated on Atlas. Normally, if a variable is already set in Atlas, Terraform will not send the local value (even if it is different). This forces it to send the local value to Atlas. This flag can be repeated multiple times.]' \
        '-token=[(token) Atlas API token to use to authorize the upload. If blank or unspecified, the ATLAS_TOKEN environmental variable will be used.]' \
        '-var=[("foo=bar") Set the value of a variable for the Terraform configuration.]' \
        '-var-file=[(foo) Set the value of variables using a variable file.]' \
101
        '-vcs=[(true) If true (default), then Terraform will detect if a VCS is in use, such as Git, and will only upload files that are committed to version control. If no version control system is detected, Terraform will upload all files in path (parameter to the command).]'
gkze's avatar
gkze committed
102
103
104
105
106
107
108
109
}

__refresh() {
    _arguments \
        '-backup=[(path) Path to backup the existing state file before modifying. Defaults to the "-state-out" path with ".backup" extension. Set to "-" to disable backup.]' \
        '-no-color[If specified, output will not contain any color.]' \
        '-state=[(path) Path to read and save state (unless state-out is specified). Defaults to "terraform.tfstate".]' \
        '-state-out=[(path) Path to write state to that is different than "-state". This can be used to preserve the old state.]' \
110
        '-target=[(resource) A Resource Address to target. Operation will be limited to this resource and its dependencies. This flag can be used multiple times.]' \
gkze's avatar
gkze committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
        '-var[("foo=bar") Set a variable in the Terraform configuration. This flag can be set multiple times.]' \
        '-var-file=[(path) Set variables in the Terraform configuration from a file. If "terraform.tfvars" is present, it will be automatically loaded if this flag is not specified.]'
}

__remote() {
    _arguments \
        '-address=[(url) URL of the remote storage server. Required for HTTP backend, optional for Atlas and Consul.]' \
        '-access-token=[(token) Authentication token for state storage server. Required for Atlas backend, optional for Consul.]' \
        '-backend=[(atlas) Specifies the type of remote backend. Must be one of Atlas, Consul, or HTTP. Defaults to atlas.]' \
        '-backup=[(path) Path to backup the existing state file before modifying. Defaults to the "-state-out" path with ".backup" extension. Set to "-" to disable backup.]' \
        '-disable[Disables remote state management and migrates the state to the -state path.]' \
        '-name=[(name) Name of the state file in the state storage server. Required for Atlas backend.]' \
        '-path=[(path) Path of the remote state in Consul. Required for the Consul backend.]' \
        '-pull=[(true) Controls if the remote state is pulled before disabling. This defaults to true to ensure the latest state is cached before disabling.]' \
        '-state=[(path) Path to read and save state (unless state-out is specified). Defaults to "terraform.tfstate".]'
}

__show() {
    _arguments \
        '-module-depth=[(n) The maximum depth to expand modules. By default this is zero, which will not expand modules at all.]' \
        '-no-color[If specified, output will not contain any color.]'
}

134
135
136
137
138
139
140
141
142
143
__taint() {
    _arguments \
        '-allow-missing[If specified, the command will succeed (exit code 0) even if the resource is missing.]' \
        '-backup=[(path) Path to backup the existing state file before modifying. Defaults to the "-state-out" path with ".backup" extension. Set to "-" to disable backup.]' \
        '-module=[(path)  The module path where the resource lives. By default this will be root. Child modules can be specified by names. Ex. "consul" or "consul.vpc" (nested modules).]' \
        '-no-color[If specified, output will not contain any color.]' \
        '-state=[(path) Path to read and save state (unless state-out is  specified). Defaults to "terraform.tfstate".]' \
        '-state-out=[(path) Path to write updated state file. By default, the "-state" path will be used.]'
}

gkze's avatar
gkze committed
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
_arguments '*:: :->command'

if (( CURRENT == 1 )); then
  _describe -t commands "terraform command" _terraform_cmds
  return
fi

local -a _command_args
case "$words[1]" in
  apply)
    __apply ;;
  destroy)
    __destroy ;;
  get)
    __get ;;
  graph)
    __graph ;;
  init)
    __init ;;
  output)
    __output ;;
  plan)
    __plan ;;
  push)
    __push ;;
  refresh)
    __refresh ;;
  remote)
    __remote ;;
  show)
    __show ;;
  taint)
    __taint ;;
esac