command: Change module-depth default to -1
This means that terraform commands like `plan`, `apply`, `show`, and `graph` will expand all modules by default. While modules-as-black-boxes is still very true in the conceptual design of modules, feedback on this behavior has consistently suggested that users would prefer to see more verbose output by default. The `-module-depth` flag and env var are retained to allow output to be optionally limited / summarized by these commands.
This commit is contained in:
parent
2dff310b8b
commit
e67fc0fe9b
|
@ -99,7 +99,7 @@ Options:
|
||||||
This helps when diagnosing cycle errors.
|
This helps when diagnosing cycle errors.
|
||||||
|
|
||||||
-module-depth=n The maximum depth to expand modules. By default this is
|
-module-depth=n The maximum depth to expand modules. By default this is
|
||||||
zero, which will not expand modules at all.
|
-1, which will expand resources within all modules.
|
||||||
|
|
||||||
-verbose Generate a verbose, "worst-case" graph, with all nodes
|
-verbose Generate a verbose, "worst-case" graph, with all nodes
|
||||||
for potential operations in place.
|
for potential operations in place.
|
||||||
|
|
|
@ -407,12 +407,17 @@ func (m *Meta) uiHook() *UiHook {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// The name of the environment variable that can be used to set module depth.
|
// ModuleDepthDefault is the default value for
|
||||||
|
// module depth, which can be overridden by flag
|
||||||
|
// or env var
|
||||||
|
ModuleDepthDefault = -1
|
||||||
|
|
||||||
|
// ModuleDepthEnvVar is the name of the environment variable that can be used to set module depth.
|
||||||
ModuleDepthEnvVar = "TF_MODULE_DEPTH"
|
ModuleDepthEnvVar = "TF_MODULE_DEPTH"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m *Meta) addModuleDepthFlag(flags *flag.FlagSet, moduleDepth *int) {
|
func (m *Meta) addModuleDepthFlag(flags *flag.FlagSet, moduleDepth *int) {
|
||||||
flags.IntVar(moduleDepth, "module-depth", 0, "module-depth")
|
flags.IntVar(moduleDepth, "module-depth", ModuleDepthDefault, "module-depth")
|
||||||
if envVar := os.Getenv(ModuleDepthEnvVar); envVar != "" {
|
if envVar := os.Getenv(ModuleDepthEnvVar); envVar != "" {
|
||||||
if md, err := strconv.Atoi(envVar); err == nil {
|
if md, err := strconv.Atoi(envVar); err == nil {
|
||||||
*moduleDepth = md
|
*moduleDepth = md
|
||||||
|
|
|
@ -244,12 +244,12 @@ func TestMeta_addModuleDepthFlag(t *testing.T) {
|
||||||
"invalid envvar is ignored": {
|
"invalid envvar is ignored": {
|
||||||
EnvVar: "-#",
|
EnvVar: "-#",
|
||||||
Args: []string{},
|
Args: []string{},
|
||||||
Expected: 0,
|
Expected: ModuleDepthDefault,
|
||||||
},
|
},
|
||||||
"empty envvar is okay too": {
|
"empty envvar is okay too": {
|
||||||
EnvVar: "",
|
EnvVar: "",
|
||||||
Args: []string{},
|
Args: []string{},
|
||||||
Expected: 0,
|
Expected: ModuleDepthDefault,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ Options:
|
||||||
|
|
||||||
-module-depth=n Specifies the depth of modules to show in the output.
|
-module-depth=n Specifies the depth of modules to show in the output.
|
||||||
This does not affect the plan itself, only the output
|
This does not affect the plan itself, only the output
|
||||||
shown. By default, this is zero. -1 will expand all.
|
shown. By default, this is -1, which will expand all.
|
||||||
|
|
||||||
-no-color If specified, output won't contain any color.
|
-no-color If specified, output won't contain any color.
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ Usage: terraform show [options] [path]
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
-module-depth=n Specifies the depth of modules to show in the output.
|
-module-depth=n Specifies the depth of modules to show in the output.
|
||||||
By default this is zero. -1 will expand all.
|
By default this is -1, which will expand all.
|
||||||
|
|
||||||
-no-color If specified, output won't contain any color.
|
-no-color If specified, output won't contain any color.
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ __get() {
|
||||||
|
|
||||||
__graph() {
|
__graph() {
|
||||||
_arguments \
|
_arguments \
|
||||||
'-module-depth=[(n) The maximum depth to expand modules. By default this is zero, which will not expand modules at all.]'
|
'-module-depth=[(n) The maximum depth to expand modules. By default this is -1, which will expand all modules.]'
|
||||||
}
|
}
|
||||||
|
|
||||||
__init() {
|
__init() {
|
||||||
|
@ -71,7 +71,7 @@ __plan() {
|
||||||
'-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.]' \
|
'-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.]' \
|
'-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.]' \
|
'-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.]' \
|
'-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 -1, which will expand all.]' \
|
||||||
'-no-color[If specified, output will not contain any color.]' \
|
'-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.]' \
|
'-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.]' \
|
'-refresh=[(true) Update state prior to checking for differences.]' \
|
||||||
|
@ -121,7 +121,7 @@ __remote() {
|
||||||
|
|
||||||
__show() {
|
__show() {
|
||||||
_arguments \
|
_arguments \
|
||||||
'-module-depth=[(n) The maximum depth to expand modules. By default this is zero, which will not expand modules at all.]' \
|
'-module-depth=[(n) The maximum depth to expand modules. By default this is -1, which will expand all modules.]' \
|
||||||
'-no-color[If specified, output will not contain any color.]'
|
'-no-color[If specified, output will not contain any color.]'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ Options:
|
||||||
This helps when diagnosing cycle errors.
|
This helps when diagnosing cycle errors.
|
||||||
|
|
||||||
* `-module-depth=n` - The maximum depth to expand modules. By default this is
|
* `-module-depth=n` - The maximum depth to expand modules. By default this is
|
||||||
zero, which will not expand modules at all.
|
-1, which will expand all modules.
|
||||||
|
|
||||||
* `-verbose` - Generate a verbose, "worst-case" graph, with all nodes
|
* `-verbose` - Generate a verbose, "worst-case" graph, with all nodes
|
||||||
for potential operations in place.
|
for potential operations in place.
|
||||||
|
|
|
@ -39,7 +39,7 @@ The command-line flags are all optional. The list of available flags are:
|
||||||
|
|
||||||
* `-module-depth=n` - Specifies the depth of modules to show in the output.
|
* `-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 does not affect the plan itself, only the output shown. By default,
|
||||||
this is zero. -1 will expand all.
|
this is -1, which will expand all.
|
||||||
|
|
||||||
* `-no-color` - Disables output with coloring.
|
* `-no-color` - Disables output with coloring.
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ file. If no path is specified, the current state will be shown.
|
||||||
The command-line flags are all optional. The list of available flags are:
|
The command-line flags are all optional. The list of available flags are:
|
||||||
|
|
||||||
* `-module-depth=n` - Specifies the depth of modules to show in the output.
|
* `-module-depth=n` - Specifies the depth of modules to show in the output.
|
||||||
By default this is zero. -1 will expand all.
|
By default this is -1, which will expand all.
|
||||||
|
|
||||||
* `-no-color` - Disables output with coloring
|
* `-no-color` - Disables output with coloring
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,10 @@ export TF_INPUT=0
|
||||||
|
|
||||||
## TF_MODULE_DEPTH
|
## TF_MODULE_DEPTH
|
||||||
|
|
||||||
When given a value, causes terraform commands to behave as if the `-module=depth=VALUE` flag was specified. Modules are treated like a black box and terraform commands do not show what resources within the module will be created. By setting this to -1, for example, you enable commands such as [plan](/docs/commands/plan.html) and [graph](/docs/commands/graph.html) to display more detailed information.
|
When given a value, causes terraform commands to behave as if the `-module=depth=VALUE` flag was specified. By setting this to 0, for example, you enable commands such as [plan](/docs/commands/plan.html) and [graph](/docs/commands/graph.html) to display more compressed information.
|
||||||
|
|
||||||
```
|
```
|
||||||
export TF_MODULE_DEPTH=-1
|
export TF_MODULE_DEPTH=0
|
||||||
```
|
```
|
||||||
|
|
||||||
For more information regarding modules, check out the section on [Using Modules](/docs/modules/usage.html).
|
For more information regarding modules, check out the section on [Using Modules](/docs/modules/usage.html).
|
||||||
|
|
|
@ -104,28 +104,26 @@ resource to the module, so the module will be built first.
|
||||||
|
|
||||||
With modules, commands such as the [plan command](/docs/commands/plan.html)
|
With modules, commands such as the [plan command](/docs/commands/plan.html)
|
||||||
and
|
and
|
||||||
[graph command](/docs/commands/graph.html) will show the module as a single
|
[graph command](/docs/commands/graph.html) will expand modules by default. You
|
||||||
unit by default. You can use the `-module-depth` parameter to expand this
|
can use the `-module-depth` parameter to limit the graph.
|
||||||
graph further.
|
|
||||||
|
|
||||||
For example, with a configuration similar to what we've built above, here
|
For example, with a configuration similar to what we've built above, here
|
||||||
is what the graph output looks like by default:
|
is what the graph output looks like by default:
|
||||||
|
|
||||||
<div class="center">
|
<div class="center">
|
||||||
![Terraform Module Graph](docs/module_graph.png)
|
![Terraform Expanded Module Graph](docs/module_graph_expand.png)
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
But if we set `-module-depth=-1`, the graph will look like this:
|
But if we set `-module-depth=0`, the graph will look like this:
|
||||||
|
|
||||||
<div class="center">
|
<div class="center">
|
||||||
![Terraform Expanded Module Graph](docs/module_graph_expand.png)
|
![Terraform Module Graph](docs/module_graph.png)
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Other commands work similarly with modules. Note that the `-module-depth`
|
Other commands work similarly with modules. Note that the `-module-depth`
|
||||||
flag is purely a formatting flag; it doesn't affect what modules are created
|
flag is purely a formatting flag; it doesn't affect what modules are created
|
||||||
or not.
|
or not.
|
||||||
|
|
||||||
|
|
||||||
## Tainting resources within a module
|
## Tainting resources within a module
|
||||||
|
|
||||||
The [taint command](/docs/commands/taint.html) can be used to _taint_
|
The [taint command](/docs/commands/taint.html) can be used to _taint_
|
||||||
|
|
|
@ -50,7 +50,7 @@ module "consul" {
|
||||||
|
|
||||||
key_name = "AWS SSH KEY NAME"
|
key_name = "AWS SSH KEY NAME"
|
||||||
key_path = "PATH TO ABOVE PRIVATE KEY"
|
key_path = "PATH TO ABOVE PRIVATE KEY"
|
||||||
region = "AWS REGION"
|
region = "us-east-1"
|
||||||
servers = "3"
|
servers = "3"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -94,14 +94,22 @@ With the modules downloaded, we can now plan and apply it. If you run
|
||||||
```
|
```
|
||||||
$ terraform plan
|
$ terraform plan
|
||||||
...
|
...
|
||||||
+ module.consul
|
+ module.consul.aws_instance.server.0
|
||||||
4 resource(s)
|
...
|
||||||
|
+ module.consul.aws_instance.server.1
|
||||||
|
...
|
||||||
|
+ module.consul.aws_instance.server.2
|
||||||
|
...
|
||||||
|
+ module.consul.aws_security_group.consul
|
||||||
|
...
|
||||||
|
Plan: 4 to add, 0 to change, 0 to destroy.
|
||||||
```
|
```
|
||||||
|
|
||||||
As you can see, the module is treated like a black box. In the plan, Terraform
|
Conceptually, the module is treated like a black box. In the plan, however
|
||||||
shows the module managed as a whole. It does not show what resources within
|
Terraform shows each resource the module manages so you can see each detail
|
||||||
the module will be created. If you care, you can see that by specifying
|
about what the plan will do. If you'd like compressed plan output, you can
|
||||||
a `-module-depth=-1` flag.
|
specify the `-module-depth=` flag to get Terraform to output summaries by
|
||||||
|
module.
|
||||||
|
|
||||||
Next, run `terraform apply` to create the module. Note that as we warned above,
|
Next, run `terraform apply` to create the module. Note that as we warned above,
|
||||||
the resources this module creates are outside of the AWS free tier, so this
|
the resources this module creates are outside of the AWS free tier, so this
|
||||||
|
|
Loading…
Reference in New Issue