_terraform 8.87 KB
Newer Older
gkze's avatar
gkze committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#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'
    'taint:Manually forcing a destroy and recreate on the next plan/apply'
    'show:Inspect Terraform state or plan'
    '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.]' \
        '-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.]' \
        '-force[Do not ask for input for destroy confirmation.]' \
        '-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 to read and save state (unless state-out is specified). Defaults to "terraform.tfstate".]' \
        '-state-out=[Path to write state to that is different than "-state". This can be used to preserve the old state.]' \
        '-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 \
        '-module-depth=[(n) The maximum depth to expand modules. By default this is zero, which will not expand modules at all.]'
}

__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 \
        '-state=[(path) Path to the state file to read. Defaults to "terraform.tfstate".]'
}

__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.]' \
        '-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.]' \
        '-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 \
        '-force[Forces the upload of the local state, ignoring any conflicts. This should be used carefully, as force pushing can cause remote state information to be lost.]'
}

__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.]' \
        '-input=[(true)  Ask for input for variables if not directly set.]' \
        '-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.]' \
        '-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.]'
}

__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.]'
}

__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.]'
}

_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