Commit Graph

1221 Commits

Author SHA1 Message Date
James Nugent
f49583d25a core: support native list variables in config
This commit adds support for native list variables and outputs, building
up on the previous change to state. Interpolation functions now return
native lists in preference to StringList.

List variables are defined like this:

variable "test" {
    # This can also be inferred
    type = "list"
    default = ["Hello", "World"]
}

output "test_out" {
    value = "${var.a_list}"
}
This results in the following state:

```
...
            "outputs": {
                "test_out": [
                    "hello",
                    "world"
                ]
            },
...
```

And the result of terraform output is as follows:

```
$ terraform output
test_out = [
  hello
  world
]
```

Using the output name, an xargs-friendly representation is output:

```
$ terraform output test_out
hello
world
```

The output command also supports indexing into the list (with
appropriate range checking and no wrapping):

```
$ terraform output test_out 1
world
```

Along with maps, list outputs from one module may be passed as variables
into another, removing the need for the `join(",", var.list_as_string)`
and `split(",", var.list_as_string)` which was previously necessary in
Terraform configuration.

This commit also updates the tests and implementations of built-in
interpolation functions to take and return native lists where
appropriate.

A backwards compatibility note: previously the concat interpolation
function was capable of concatenating either strings or lists. The
strings use case was deprectated a long time ago but still remained.
Because we cannot return `ast.TypeAny` from an interpolation function,
this use case is no longer supported for strings - `concat` is only
capable of concatenating lists. This should not be a huge issue - the
type checker picks up incorrect parameters, and the native HIL string
concatenation - or the `join` function - can be used to replicate the
missing behaviour.
2016-05-10 14:49:14 -04:00
Mitchell Hashimoto
e81fb10e61 terraform: test file for last commit 2016-05-10 14:49:14 -04:00
Mitchell Hashimoto
3480b7ebee terraform: state filter wasn't comparing resource names 2016-05-10 14:49:14 -04:00
James Nugent
e57a399d71 core: Use native HIL maps instead of flatmaps
This changes the representation of maps in the interpolator from the
dotted flatmap form of a string variable named "var.variablename.key"
per map element to use native HIL maps instead.

This involves porting some of the interpolation functions in order to
keep the tests green, and adding support for map outputs.

There is one backwards incompatibility: as a result of an implementation
detail of maps, one could access an indexed map variable using the
syntax "${var.variablename.key}".

This is no longer possible - instead HIL native syntax -
"${var.variablename["key"]}" must be used. This was previously
documented, (though not heavily used) so it must be noted as a backward
compatibility issue for Terraform 0.7.
2016-05-10 14:49:13 -04:00
James Nugent
6aac79e194 state: Add support for outputs of multiple types
This commit adds the groundwork for supporting module outputs of types
other than string. In order to do so, the state version is increased
from 1 to 2 (though the "public-facing" state version is actually as the
first state file was binary).

Tests are added to ensure that V2 (1) state is upgraded to V3 (2) state,
though no separate read path is required since the V2 JSON will
unmarshal correctly into the V3 structure.

Outputs in a ModuleState are now of type map[string]interface{}, and a
test covers round-tripping string, []string and map[string]string, which
should cover all of the types in question.

Type switches have been added where necessary to deal with the
interface{} value, but they currently default to panicking when the input
is not a string.
2016-05-10 14:40:12 -04:00
James Nugent
3393492033 Renumber original binary state as V0
This commit rectifies the fact that the original binary state is
referred to as V1 in the source code, but the first version of the JSON
state uses StateVersion: 1. We instead make the code refer to V0 as the
binary state, and V1 as the first version of JSON state.
2016-05-10 14:40:12 -04:00
Mitchell Hashimoto
35c87836b4 core: Add terraform_version to state
This adds a field terraform_version to the state that represents the
Terraform version that wrote that state. If Terraform encounters a state
written by a future version, it will error. You must use at least the
version that wrote that state.

Internally we have fields to override this behavior (StateFutureAllowed),
but I chose not to expose them as CLI flags, since the user can just
modify the state directly. This is tricky, but should be tricky to
represent the horrible disaster that can happen by enabling it.

We didn't have to bump the state format version since the absense of the
field means it was written by version "0.0.0" which will always be
older. In effect though this change will always apply to version 2 of
the state since it appears in 0.7 which bumped the version for other
purposes.
2016-05-10 14:40:11 -04:00
Mitchell Hashimoto
a94b9fdc92 terraform: Internals for state rm command
I decided to split this up from the terraform state rm command to make the diff easier to see. These changes will also be used for terraform state mv.

This adds a `Remove` method to the `*terraform.State` struct. It takes a list of addresses and removes the items matching that list. This leverages the `StateFilter` committed last week to make the view of the world consistent across address lookups.

There is a lot of test duplication here with StateFilter, but in Terraform style: we like it that way.
2016-05-10 14:14:48 -04:00
Mitchell Hashimoto
f6692e66ac add command/state show 2016-05-10 14:14:47 -04:00
Mitchell Hashimoto
a754723561 terraform: fix some issues around filtering single counts 2016-05-10 14:14:47 -04:00
Mitchell Hashimoto
d1b46e99bd Add terraform state list command
This introduces the terraform state list command to list the resources
within a state. This is the first of many state management commands to
come into 0.7.

This is the first command of many to come that is considered a
"plumbing" command within Terraform (see "plumbing vs porcelain":
http://git.661346.n2.nabble.com/what-are-plumbing-and-porcelain-td2190639.html).
As such, this PR also introduces a bunch of groundwork to support
plumbing commands.

The main changes:

- Main command output is changed to split "common" and "uncommon"
  commands.

- mitchellh/cli is updated to support nested subcommands, since
  terraform state list is a nested subcommand.

- terraform.StateFilter is introduced as a way in core to filter/search
  the state files. This is very basic currently but I expect to make it
  more advanced as time goes on.

- terraform state list command is introduced to list resources in a
  state. This can take a series of arguments to filter this down.

Known issues, or things that aren't done in this PR on purpose:

- Unit tests for terraform state list are on the way. Unit tests for the
  core changes are all there.
2016-05-10 14:14:47 -04:00
James Nugent
8d7e1af28f release: clean up after v0.6.16 2016-05-09 21:10:58 +00:00
James Nugent
6e586c8939
v0.6.16 2016-05-09 20:31:07 +00:00
Paul Hinze
fe210e6da4
core: Fix interp error msgs on module vars during destroy
Wow this one was tricky!

This bug presents itself only when using planfiles, because when doing a
straight `terraform apply` the interpolations are left in place from the
Plan graph walk and paper over the issue. (This detail is what made it
so hard to reproduce initially.)

Basically, graph nodes for module variables are visited during the apply
walk and attempt to interpolate. During a destroy walk, no attributes
are interpolated from resource nodes, so these interpolations fail.

This scenario is supposed to be handled by the `PruneNoopTransformer` -
in fact it's described as the example use case in the comment above it!

So the bug had to do with the actual behavor of the Noop transformer.
The resource nodes were not properly reporting themselves as Noops
during a destroy, so they were being left in the graph.

This in turn triggered the module variable nodes to see that they had
another node depending on them, so they also reported that they could
not be pruned.

Therefore we had two nodes in the graph that were effectively noops but
were being visited anyways. The module variable nodes were already graph
leaves, which is why this error presented itself as just stray messages
instead of actual failure to destroy.

Fixes #5440
Fixes #5708
Fixes #4988
Fixes #3268
2016-05-09 12:18:57 -05:00
James Nugent
91c644f194 release: clean up after v0.6.15 2016-04-22 19:06:05 +00:00
James Nugent
0c5c54e7b6
v0.6.15 2016-04-22 18:29:43 +00:00
James Nugent
31cc2d2ccd core: Do not type check unset variables
A consequnce of the work done in #6185 was that variables which were in
a module but not set explicitly (i.e. the default value was relied upon)
were marked as type errors. This was reported in #6230.

This commit adds a test case for this and a patch which fixes the issue.
2016-04-21 23:30:34 -05:00
Paul Hinze
ddf794b7f7 core: fix provider config inheritence for deeply nested modules (#6186)
The flattening process was not properly drawing dependencies between provider
nodes in modules and their parent provider nodes.

Fixes #2832
Fixes #4443
Fixes #4865
2016-04-18 16:19:43 -07:00
James Nugent
d7d39702c0 Type check variables between modules (#6185)
These tests demonstrates a problem where the types to a module input are 
not checked. For example, if a module - inner - defines a variable
"should_be_a_map" as a map, or with a default variable of map, we do not
fail if the user sets the variable value in the outer module to a string
value. This is also a problem in nested modules.

The implementation changes add a type checking step into the graph
evaluation process to ensure invalid types are not passed.
2016-04-15 12:07:54 -07:00
James Nugent
0d289f982c core: Print node types in traces
This makes it clearer when looking at  output as to which types of node
are involved in a particular graph.
2016-04-13 10:20:18 -07:00
Paul Hinze
d992f8d52d core: Remove module input transformer
The nodes it adds were immediately skipped by flattening and therefore
never had any effect. That makes the transformer effectively dead code
and removable. This was the only usage of FlattenSkip so we can remove
that as well.
2016-04-13 11:15:24 -05:00
Paul Hinze
9b01acd829 release: clean up after v0.6.14 2016-03-22 00:26:11 +00:00
Paul Hinze
c7e5b24531
v0.6.14 2016-03-21 23:57:35 +00:00
Paul Hinze
024dcc9d32 terraform: share graph walker's variables lock w/ interpolater
The ContextGraphWalker struct includes a lock that's passed down to
BuiltinEvalContext and guards access to interpolation variables as
they're written using SetVariables.

The likely problem being expressed in #5733 is that the same map
reference is also passed down to the Interpolater.Variables field, which
is used for variable lookup.

Here, we plumb the same lock we're using to guard access for writes down
and acquire it before doing variable reads as well. It's not as fine
grained as perhaps it could be, but all the context tests pass and I
believe this should address #5733.
2016-03-21 18:21:44 -05:00
Paul Hinze
f480ae3430 core: Fix issues with ignore_changes
The ignore_changes diff filter was stripping out attributes on Create
but the diff was still making it down to the provider, so Create would
end up missing attributes, causing a full failure if any required
attributes were being ignored.

In addition, any changes that required a replacement of the resource
were causing problems with `ignore_chages`, which didn't properly filter
out the replacement when the triggering attributes were filtered out.

Refs #5627
2016-03-21 14:20:36 -05:00
James Nugent
b25f2091e6 release: clean up after v0.6.13 2016-03-16 11:53:29 +00:00
James Nugent
1f627a8a0b
v0.6.13 2016-03-16 11:03:08 +00:00
Paul Hinze
57070057db Merge pull request #5527 from hashicorp/phinze/untaint
command: Add `terraform untaint`
2016-03-14 09:34:43 -05:00
Paul Hinze
c7f5450a96 command: Add terraform untaint
- [x] Docs
 - [x] Command Unit Tests
 - [x] State Unit Tests

Closes #4820
2016-03-11 12:38:57 -06:00
Paul Hinze
f882dd1427 core: Encode Targets in saved Planfile
When a user specifies `-target`s on a `terraform plan` and stores
the resulting diff in a plan file using `-out` - it usually works just
fine since the diff is scoped based on the targets.

When there are tainted resources in the state, however, graph nodes to
destroy them were popping back into the plan when it was being loaded
from a file. This was because Targets weren't being stored in the
Planfile, so Terraform didn't know to filter them out. (In the
non-Planfile scenario, we still had the Targets loaded directly from the
flags.)

By encoding Targets in with the Planfile we can ensure that the same
filters are always applied.

Backwards compatibility should be fine here, since we're just adding a
field. The gob encoder/decoder will just do the right thing (ignore/skip
the field) with planfiles stored w/ versions that don't know about
Targets.

Fixes #5183
2016-03-08 14:29:37 -06:00
Paul Hinze
5d9637ab1a core: Clean up test for issue #5254 2016-03-08 14:28:18 -06:00
Paul Hinze
2a97e53b24 release: clean up after v0.6.12 2016-02-24 20:33:57 +00:00
Paul Hinze
9556c4dfab
v0.6.12 2016-02-24 19:58:28 +00:00
James Nugent
242f088309 Merge pull request #5302 from hashicorp/b-5254
terraform: don't prune resource if count has interpolations
2016-02-24 12:17:35 -05:00
Mitchell Hashimoto
12b6776675 terraform: don't prune resource if count contains interpolations 2016-02-24 12:04:42 -05:00
Mitchell Hashimoto
54411301c4 terraform: println so we show up in logs 2016-02-24 11:57:27 -05:00
Paul Hinze
b7554ced1d terraform: repro for issue 5254 test 2016-02-24 10:04:57 -06:00
Paul Hinze
6af79168db core: demote early exit log from ERROR -> DEBUG 2016-02-24 09:58:33 -06:00
Mitchell Hashimoto
4eed21f04c terraform: issue 5254 test case (not yet working) 2016-02-24 10:55:55 -05:00
Paul Hinze
8472c7d59f core: log eval tree operations 2016-02-24 09:49:11 -06:00
Paul Hinze
b831ba3ab6 terraform: tweak diffs didn't match output spacing
Use four-space indent to catch `<pre>` formatting on GitHub for users
who copy/paste.
2016-02-23 14:35:30 -06:00
Paul Hinze
dabb8a3511 Merge pull request #5276 from hashicorp/phinze/diffs-didnt-matchs-output
core: output "diffs didn't match" error details
2016-02-23 14:07:23 -06:00
Paul Hinze
78f5780248 core: output "diffs didn't match" error details
Previously these details were relegated to the debug logs, which forces
the user to reproduce the error condition and then go digging for the
error message. Since we're asking users to report this error, let's give
them all the details they need right up front to make it a little easier
on them.
2016-02-23 13:41:18 -06:00
Paul Hinze
fbc9cf9ddb core: error instead of panic on self var in wrong scope
Fixes #4808
Fixes #5174
2016-02-23 11:44:24 -06:00
Paul Hinze
5a9dad82d6 terraform: upgrade resource name regexp failure to error
We're well past Terraform 0.4, so it's time to finally make good on the
original promise. :)

Fixes #5243
2016-02-23 10:32:49 -06:00
Paul Hinze
136c228b48 core: add context test for #5096 2016-02-22 18:37:21 -06:00
Paul Hinze
3d2bd8576a Merge pull request #5096 from paybyphone/paybyphone_create_before_destroy_bypass
Bypass CreateBeforeDestroyTransformer on terraform destroy
2016-02-22 18:34:36 -06:00
James Nugent
bc6107508d Fix additional vet warnings 2016-02-17 11:59:50 -08:00
Chris Marchesi
4a22ac5ea0 Bypass CreateBeforeDestroyTransformer during terraform destroy 2016-02-10 20:08:36 -08:00
Paul Hinze
9a00675262 Merge pull request #5026 from hashicorp/phinze/destroy-node-copies
core: Make copies when creating destroy nodes
2016-02-09 11:12:01 -06:00
Paul Hinze
4c123dbf96 Merge pull request #5022 from hashicorp/phinze/fix-provider-double-init-for-nested-module-orphans
core: fix bug detecting deeply nested module orphans
2016-02-09 11:02:37 -06:00
Paul Hinze
e76fdb92e7 core: fix bug detecting deeply nested module orphans
Context:

As part of building up a Plan, Terraform needs to detect "orphaned"
resources--resources which are present in the state but not in the
config. This happens when config for those resources is removed by the
user, making it Terraform's responsibility to destroy them.

Both state and config are organized by Module into a logical tree, so
the process of finding orphans involves checking for orphaned Resources
in the current module and for orphaned Modules, which themselves will
have all their Resources marked as orphans.

Bug:

In #3114 a problem was exposed where, given a module tree that looked
like this:

```
root
 |
 +-- parent (empty, except for sub-modules)
       |
       +-- child1 (1 resource)
       |
       +-- child2 (1 resource)
```

If `parent` was removed, a bunch of error messages would occur during
the plan. The root cause of this was duplicate orphans appearing for the
resources in child1 and child2.

Fix:

This turned out to be a bug in orphaned module detection. When looking
for deeply nested orphaned modules, root.parent was getting added twice
as an orphaned module to the graph.

Here, we add an additional check to prevent a double add, which
addresses this scenario properly.

Fixes #3114 (the Provisioner side of it was fixed in #4877)
2016-02-09 10:35:46 -06:00
Paul Hinze
3f72837f4b core: Make copies when creating destroy nodes
Fixes an interpolation race that was occurring when a tainted destroy
node and a primary destroy node both tried to interpolate a computed
count in their config. Since they were sharing a pointer to the _same_
config, depending on how the race played out one of them could catch the
config uninterpolated and would then throw a syntax error.

The `Copy()` tree implemented for this fix can probably be used
elsewhere - basically we should copy the config whenever we drop nodes
into the graph - but for now I'm just applying it to the place that
fixes this bug.

Fixes #4982 - Includes a test covering that race condition.
2016-02-09 09:25:16 -06:00
Sander van Harmelen
f6822dcb7d Merge pull request #4999 from svanharmelen/f-rename-missing-provider-node
Rename `graphNodeMissingProvider` to `graphNodeProvider`
2016-02-08 20:32:03 +01:00
Paul Hinze
0846e32e21 Merge pull request #4877 from svanharmelen/b-provisioner-graphing
core: fix the provisioner graphing
2016-02-05 12:39:19 -06:00
Sander van Harmelen
e938a645c5 Rename graphNodeMissingProvider to graphNodeProvider
It seems `graphNodeProvider` is a more descriptive name for this node…
2016-02-04 21:41:04 +01:00
Sander van Harmelen
1bec11472a Cleaning up the PruneProvisionerTransformer
And renamed some types so they better reflect what they are for.
2016-02-04 21:32:10 +01:00
Mitchell Hashimoto
8be4afacf8 terraform: replace config/lang usage 2016-02-03 13:24:04 -05:00
David Harris
d95ab75565 Added EvalIgnoreChanges on diffApply. 2016-02-02 15:23:25 -07:00
clint
dce2994151 release: clean up after v0.6.11 2016-02-01 20:17:08 +00:00
clint
3590cfadb0
v0.6.11 2016-02-01 19:16:01 +00:00
Sander van Harmelen
5c3da47d8e Fix the provisioner graphing
Without this change, all provisioners are added to the graph by default
and they are never pruned from the graph if their not needed.
2016-01-28 16:14:15 +01:00
Paul Hinze
2dca1ea9a0 release: clean up after v0.6.10 2016-01-27 17:01:41 -06:00
Paul Hinze
22481b06f5
v0.6.10 2016-01-27 22:18:55 +00:00
Paul Hinze
48b172aa86 core: treat refs to unknown set resource attrs as unknown
References to computed list-ish attributes (set, list, map) were being
improperly resolved as an empty list `[]` during the plan phase (when
the value of the reference is not yet known) instead of as an
UnknownValue.

A "diffs didn't match" failure in an AWS DirectoryServices test led to
this discovery (and this commit fixes the failing test):

https://travis-ci.org/hashicorp/terraform/jobs/104812951

Refs #2157 which has the original work to support computed list
attributes at all. This is just a simple tweak to that work.

/cc @radeksimko
2016-01-26 13:50:44 -06:00
James Nugent
cb6cb8b96a core: Support explicit variable type declaration
This commit adds support for declaring variable types in Terraform
configuration. Historically, the type has been inferred from the default
value, defaulting to string if no default was supplied. This has caused
users to devise workarounds if they wanted to declare a map but provide
values from a .tfvars file (for example).

The new syntax adds the "type" key to variable blocks:

```
variable "i_am_a_string" {
    type = "string"
}

variable "i_am_a_map" {
    type = "map"
}
```

This commit does _not_ extend the type system to include bools, integers
or floats - the only two types available are maps and strings.

Validation is performed if a default value is provided in order to
ensure that the default value type matches the declared type.

In the case that a type is not declared, the old logic is used for
determining the type. This allows backwards compatiblity with previous
Terraform configuration.
2016-01-24 11:40:02 -06:00
Paul Hinze
8d8b28717e Merge pull request #4574 from hashicorp/phinze/orphan-addressing
Orphan addressing / targeting
2016-01-21 15:07:41 -06:00
Paul Hinze
545aaf1864 core: demote evaltree loglevel from INFO -> TRACE
One small step in the long road to making our log levels actually
useful. :)
2016-01-21 10:20:53 -06:00
Paul Hinze
7d10d454e2 Merge pull request #4749 from hashicorp/b-1752
core: fix diff mismatch when RequiresNew field and list both change
2016-01-19 18:29:10 -06:00
Paul Hinze
a0d3245ee3 core: Orphan addressing / targeting
Instead of trying to skip non-targeted orphans as they are added to
the graph in OrphanTransformer, remove knowledge of targeting from
OrphanTransformer and instead make the orphan resource nodes properly
addressable.

That allows us to use existing logic in TargetTransformer to filter out
the nodes appropriately. This does require adding TargetTransformer to the
list of transforms that run during DynamicExpand so that targeting can
be applied to nodes with expanded counts.

Fixes #4515
Fixes #2538
Fixes #4462
2016-01-19 17:48:44 -06:00
Paul Hinze
4af2c5f5dd core: fix diff mismatch when RequiresNew field and list both change
fixes #1752

Includes AccTest reproducing example from the issue as well as a bunch
of explanatory comments in the tests and impls.
2016-01-19 15:38:04 -06:00
Mitchell Hashimoto
54de9057ba terraform: failing test case 2016-01-19 12:37:55 -08:00
Clint
f9113ad40e release: clean up after v0.6.9 2016-01-08 19:03:25 +00:00
Clint
fd1c2697a4
v0.6.9 2016-01-08 17:43:57 +00:00
Paul Hinze
f80655b1ce release: clean up after v0.6.8 2015-12-02 15:32:07 +00:00
Paul Hinze
f1f214f03d
v0.6.8 2015-12-02 15:06:55 +00:00
Paul Hinze
0e277a6714 core: test coverage around map key regression
tests to cover the HCL-level issue fixed in
https://github.com/hashicorp/hcl/pull/65
2015-11-24 16:00:02 -06:00
clint shryock
73e1f4ce52 release: clean up after v0.6.7 2015-11-23 15:46:11 -06:00
clint shryock
b7c41aed92
v0.6.7 2015-11-23 18:16:01 +00:00
Paul Hinze
993ec0a320 Merge pull request #3909 from hashicorp/phinze/template-file-contents
template_file: source contents instead of path
2015-11-16 14:50:45 -06:00
James Nugent
38bb9f2416 Allow targeting of orphan nodes
Fixes #3852. We now run the OrphanTransformer even when targeting, and
pass it the list of targets following resource expansion.
2015-11-13 14:33:58 -06:00
James Nugent
bfb770ee89 Add failing test for targeted destroy on orphan
This replicates the issue reported in #3852.
2015-11-13 13:20:04 -06:00
Paul Hinze
928f534cfc template_file: source contents instead of path
Building on the work of #3846, deprecate `filename` in favor of a
`template` attribute that accepts file contents instead of a path.

Required a bit of work in the interpolation code to prevent Terraform
from assuming that template interpolations were resource variables that
needed to be resolved. Leaving them as "Unknown Variables" prevents
interpolation from happening early and lets the `template_file` resource
do its thing.
2015-11-13 11:24:20 -06:00
James Nugent
2a0334125c Add test attempting to reproduce #2598
This attempts to reproduce the issue described in #2598 whereby outputs
added after an apply are not reflected in the output. As per the issue
the outputs are described using the JSON syntax.
2015-11-09 15:27:09 -05:00
James Nugent
f4c03ec2a6 Reflect new comment format in stringer.go
As of November 8th 2015, (4b07c5ce8a), the word "Code" is prepended to
the comments in Go source files generated by the stringer utility.
2015-11-09 11:38:51 -05:00
stack72
89ce6f7c83 Started the work for the AWS CodeCommit Repository resource
Starting to add the skeleton for the creation and update of a repository
2015-10-30 21:39:04 +00:00
Paul Hinze
715437537d command: fix flaky parallelism tests
Thanks to @mitchellh for helping sort out concurrency stuff here.
2015-10-29 15:16:34 -05:00
Paul Hinze
81ffb72230 release: clean up after v0.6.6 2015-10-23 10:50:35 -05:00
Paul Hinze
d83cb911cd v0.6.6 2015-10-23 15:31:41 +00:00
Paul Hinze
d2034a26b2 release: clean up after v0.6.5 2015-10-21 11:34:52 -05:00
Paul Hinze
5ea09afad5 v0.6.5 2015-10-21 10:47:56 -05:00
Paul Hinze
05c0998d2d core: store deeply nested modules in a consistent order in the state
We were only comparing the last element of the module, which meant that
deeply nested modules with the same name but different ancestry had an
undefined sort order, which could cause inconsistencies in state
storage and potentially break remote state MD5 checksumming.
2015-10-20 14:35:57 -05:00
Paul Hinze
fca44bdec3 core: state metadata difference should bump serial
Remote state includes MD5-based checksumming to protect against State
conflicts. This can generate improper conflicts with states that differ
only in their Schema version.

We began to see this issue with
https://github.com/hashicorp/terraform/pull/3470 which changes the
"schema_version" of aws_key_pairs.
2015-10-20 12:28:12 -05:00
Mitchell Hashimoto
263cc1b855 terraform: final failing test 2015-10-15 13:52:27 -07:00
clint shryock
1bfd4b0f71 Reset CHANGELOG/version for 0.6.5 release 2015-10-15 17:50:20 +00:00
clint shryock
49396ba3e0 v0.6.4 2015-10-15 15:51:15 +00:00
Paul Hinze
562a793430 style: ran go fmt 2015-10-15 10:21:20 -05:00
Rob Zienert
a1939e70f7 Adding ignore_changes lifecycle meta property 2015-10-14 16:34:27 -05:00
Martin Atkins
8173cd25bb Demote some log lines to DEBUG.
Now that we support log line filtering (as of 0090c063) it's good to be
a bit more fussy about what log levels are assigned to different things.

Here we make a few things that are implementation details log as DEBUG,
and prevent spurious errors from EvalValidateCount where it was returning
an empty EvalValidateError rather than nil when everything was okay.
2015-10-11 10:45:33 -07:00
Martin Atkins
3c939f9b26 Merge #3239: "compact" interpolation function 2015-10-10 15:18:10 -07:00
Anthony Stanton
3040d8419f Test removing weird zero+zero Route53 test case 2015-10-08 18:07:07 +02:00
Panagiotis Moustafellos
e4845f75cc removed extra parentheses 2015-10-08 15:48:04 +03:00
Radek Simko
3a05f01553 Treat missing variables during destroy as unknown 2015-10-03 14:16:40 -07:00
Radek Simko
40b04154fe Add operation walkDestroy 2015-10-03 14:16:40 -07:00
Radek Simko
2b60d0c6b6 Add repro test case for bug #2892 2015-10-03 14:16:39 -07:00
Paul Hinze
c39fdd2917 Merge pull request #2988 from hashicorp/b-input-var-partially-computed
core: don't error on computed value during input walk
2015-09-24 15:07:49 -05:00
Anthony Scalisi
198e1a5186 remove various typos 2015-09-11 11:56:20 -07:00
Radek Simko
91d750d2df interpolate: Expand computed TypeList attributes properly 2015-08-27 13:02:02 +01:00
Paul Hinze
c618132085 tests: fix missed test update from last merge 2015-08-13 10:11:12 -05:00
Paul Hinze
22ea3d693f update prevent_destroy error message
per recommendations by @nathanielks

closes #2473
2015-08-13 09:57:52 -05:00
Paul Hinze
b928777cac core: don't error on computed value during input walk
fixes #2987
2015-08-12 14:23:33 -05:00
Clint Shryock
58d8ae8b51 release: cleanup after v0.6.3 2015-08-11 11:42:54 -05:00
Clint Shryock
234f49a2c9 v0.6.3 2015-08-11 15:45:58 +00:00
Paul Hinze
52c4bfbe98 core: fix deadlock when dependable node replaced with non-dependable one
In #2884, Terraform would hang on graphs with an orphaned resource
depended on an orphaned module.

This is because orphan module nodes (which are dependable) were getting
expanded (replaced) with GraphNodeBasicSubgraph nodes (which are _not_
dependable).

The old `graph.Replace()` code resulted in GraphNodeBasicSubgraph being
entered into the lookaside table, even though it is not dependable.

This resulted in an untraversable edge in the graph, so the graph would
hang and wait forever.

Now, we remove entries from the lookaside table when a dependable node
is being replaced with a non-dependable node. This means we lose an
edge, but we can move forward. It's ~probably~ never correct to be
replacing depenable nodes with non-dependable ones, but this tweak
seemed preferable to tossing a panic in there.
2015-08-10 15:50:36 -05:00
Paul Hinze
7a464b1156 tests: extract deadlock checking test helper 2015-08-10 15:50:36 -05:00
Clint Shryock
fd2b943c9d release: clean up after v0.6.2 2015-08-06 14:35:18 -05:00
Clint Shryock
f26d2b75c8 v0.6.2 2015-08-06 18:59:05 +00:00
Paul Hinze
5ebbda3334 core: fix crash on provider warning
When a provider validation only returns a warning, we were cutting the
evaltree short by returning an error. This is fine during a
`walkValidate` but was causing trouble during `walkPlan` and
`walkApply`.

fixes #2870
2015-07-28 17:13:14 -05:00
Radek Simko
a22dc2a9a2 Add resource ID to refresh errors 2015-07-22 14:09:39 +02:00
Radek Simko
8e477b78d8 Add resource ID to errors coming from apply 2015-07-22 14:09:34 +02:00
Clint Shryock
7110364298 release: clean up after v0.6.1 2015-07-20 16:03:53 -05:00
Clint Shryock
4c67368dd8 v0.6.1 2015-07-20 20:03:29 +00:00
Mitchell Hashimoto
8d29f274c8 terraform: remove print 2015-07-20 08:57:35 -07:00
Mitchell Hashimoto
696d5ef94f terraform: clarify comment 2015-07-20 08:57:35 -07:00
Mitchell Hashimoto
4d361c839e terraform: prune resources and variables 2015-07-20 08:57:34 -07:00
Mitchell Hashimoto
6550f564bf terraform: PruneNoopTransformer 2015-07-20 08:57:34 -07:00
Mitchell Hashimoto
853f4f2385 Merge pull request #2786 from hashicorp/b-nested-module-orphans
Grandchild module orphans should be destroyed
2015-07-20 08:52:33 -07:00
Mitchell Hashimoto
955bbbba41 terraform: state module orphans should only return direct 2015-07-20 08:41:24 -07:00
Paul Hinze
392f56101c core: add failing deeply nested orphan module test
I was worried about the implications of deeply nested orphaned modules
in the parent commit, so I added a test. It's failing but not quite like
I expected it to. Perhaps I've uncovered an unrelated bug here?

/cc @mitchellh
2015-07-20 10:19:52 -05:00
Mitchell Hashimoto
7735847579 terraform: splatting with computed values is computed [GH-2744] 2015-07-19 17:27:38 -07:00
Mitchell Hashimoto
edd05f2aa2 terraform: fix some test failures 2015-07-19 14:14:05 -07:00
Mitchell Hashimoto
61d275f475 terraform: get nested oprhans in the transform 2015-07-19 13:53:31 -07:00
Mitchell Hashimoto
96a04c16f6 terraform: state ModuleOrphans should return grandchild orphans 2015-07-19 13:41:57 -07:00
Mitchell Hashimoto
2ee46eda94 test case 2015-07-17 10:58:47 -07:00
Paul Hinze
f97c635ef6 core: fix "provider ... couldn't be found" bug
The `CloseProviderTransformer` relies on the `ProvidedBy()` interface to
look up the proper dependency for the the graph nodes it adds. This
interface needs to yield the name of a provider, _AND_ for flattened
nodes it needs to yield the full path to a provider.

Destroy nodes did not implement this second part, which resulted in
"provider X couldn't be found" when both of these were true:

 * A module included a resource that dependend on a provider
 * The root did _NOT_ include a provider config

Implementing a proper ProvidedBy() on the flattened version of
destroy nodes solves the issue.

fixes #2581
2015-07-16 11:56:58 -05:00
Paul Hinze
ff45f6451d core: split context tests
The context_test file has gotten pretty unruly. Let's split it up into
a few files so we can be nicer to our editors and our own sanity.

Definitely lots more we can do to clean up, but with changes like this
I'd rather do small, focused, clear steps instead of one big "cleaned up
lots of stuff" PR.
2015-07-10 14:08:49 -06:00
Sander van Harmelen
4a8ef78d33 Fixes #2676 by prefixing all Windows commands
By prefixing them with `cmd /c` it will work with both `winner` and
`ssh` connection types.

This PR also reverts some bad stringer changes made in PR #2673
2015-07-10 12:56:27 +02:00
Sander van Harmelen
97fd4f5b7d Tweaking the tests 2015-07-09 21:29:27 +02:00
Paul Hinze
5c38456b05 core: don't prompt for variables with defaults
In `helper/schema` we already makes a distinction between `Default`
which is always applied and `InputDefault` which is displayed to the
user for an empty field.

But for variables we just have `Default` which is treated like
`InputDefault`. This changes it to _not_ prompt the user for a value
when the variable declaration includes a default.

Treating this as a UX bugfix and the "don't prompt for variables w/
defaults set" behavior as the originally expected behavior we were
failing to honor.

Added an already-passing test to verify and cover the `helper/schema`
behavior.

Perhaps down the road we can add a `input_default` attribute to
variables to allow similar behavior to `helper/schema` in variables, but
for now just sticking with the fix.

Fixes #2592
2015-07-02 10:40:30 -05:00
Paul Hinze
3d81d83d01 release: clean up after 0.6.0 2015-06-30 17:39:32 -05:00
Paul Hinze
e40127fda6 v0.6.0 2015-06-30 19:57:29 +00:00
Paul Hinze
6bbf61ae6e Merge pull request #2555 from hashicorp/b-target-after-flatten
core: move targets transform after flatten
2015-06-29 13:34:52 -05:00
Paul Hinze
cf432b3ceb core: move targets transform after flatten
Allows target dependencies to be properly calculated across module
boundaries, fixing scenarios where a target depends on something inside
a module, but the contents of the module are not included in the
targeted resources.

fixes #1858
2015-06-29 13:19:37 -05:00
Paul Hinze
184edbefcd core: remove now-unused flatten impls of close nodes
/cc @mitchellh
2015-06-29 12:46:24 -05:00
Paul Hinze
557b299c4b core: move close transforms after flatten and destroy transforms
fixes destroy-related failures introduced by the close transforms
2015-06-29 12:46:18 -05:00
Mitchell Hashimoto
d6f7261190 terraform: provider mock should close itself to find bugs 2015-06-29 10:33:37 -07:00
Paul Hinze
00a177cd99 provider/aws: add test for provider aliases
Not sure if this test has value /cc @mitchellh (who requested one be
added) to see what I might be missing here.

refs #2495
2015-06-29 11:35:02 -05:00
Paul Hinze
2d6a8c1f39 core: fix provider/close provider race when targeting
When targeting prunes out all the resource nodes between a provider and
its close node, there was no dependency to ensure the close happened
after the configure. Needed to add an explicit dependency from the close
to the provider.

This tweak highlighted the fact that CloseProviderTransformer needed to
happen after DisableProviderTransformer, since
DisableProviderTransformer inspects up-edges to decide what to disable,
and CloseProviderTransformer adds an up-edge.

fixes #2495
2015-06-29 11:22:51 -05:00
Paul Hinze
2626c179a5 core: improve debug logging when targeting 2015-06-26 14:04:58 -05:00
Mitchell Hashimoto
51a7e05f8a terraform: all providers for ProvidedBy() should be added 2015-06-26 12:00:02 -07:00
Mitchell Hashimoto
7daf13487f Merge pull request #2506 from hashicorp/b-orphan-hook
terraform: orphans should call post-apply hook [GH-1938]
2015-06-26 08:19:16 -07:00
Paul Hinze
a81cad3672 Merge pull request #2504 from hashicorp/f-string-list
core: Change string list representation so we can distinguish empty, single element lists
2015-06-26 08:41:38 -05:00
Mitchell Hashimoto
8ebdc1e786 terraform: orphans should call post-apply hook [GH-1938] 2015-06-25 20:11:29 -07:00
Mitchell Hashimoto
a3a2698e56 Merge pull request #2479 from hashicorp/b-validate-fail-early
terraform: fail early if module validation fails
2015-06-25 17:50:35 -07:00
Paul Hinze
e88aeede9b core: allow distinguishing between empty lists and strings
Had to handle a lot of implicit leaning on a few properties of the old
representation:

 * Old representation allowed plain strings to be treated as lists
   without problem (i.e. shoved into strings.Split), now strings need to
   be checked whether they are a list before they are treated as one
   (i.e. shoved into StringList(s).Slice()).
 * Tested behavior of 0 and 1 length lists in formatlist() was a side
   effect of the representation. Needs to be special cased now to
   maintain the behavior.
 * Found a pretty old context test failure that was wrong in several
   different ways. It's covered by TestContext2Apply_multiVar so I
   removed it.
2015-06-25 18:53:35 -05:00
Paul Hinze
10b3abf405 config: introduce StringList to abstract over list hack
This is the initial pure "all tests passing without a diff" stage. The
plan is to change the internal representation of StringList to include a
suffix delimiter, which will allow us to recognize empty and
single-element lists.
2015-06-25 17:55:56 -05:00
Mitchell Hashimoto
592df714eb Merge pull request #2478 from hashicorp/b-invalid-var-should-error
terraform: error if resource not found in module [GH-1997]
2015-06-25 08:56:20 -07:00
Mitchell Hashimoto
c79a661ce1 Merge branch 'b-provider-alias-module' 2015-06-25 08:54:56 -07:00
Mitchell Hashimoto
632cc92897 Merge pull request #2476 from hashicorp/b-orphan-provider-inherit
terraform: module orphans providers should inherit config
2015-06-25 08:50:49 -07:00
Mitchell Hashimoto
ced4701a8c terraform: remove test that was weirdly passing without error 2015-06-24 22:51:29 -07:00
Mitchell Hashimoto
785defc870 terraform: fail early if module validation fails 2015-06-24 22:43:55 -07:00
Mitchell Hashimoto
fcc710ca06 terraform: error if resource not found in module [GH-1997] 2015-06-24 22:25:48 -07:00
Mitchell Hashimoto
54b961630d terraform: module computed vars with splat vars don't error 2015-06-24 21:23:37 -07:00
Mitchell Hashimoto
29eadb8194 terraform: missing provider should add missing aliases [GH-2023] 2015-06-24 20:58:52 -07:00
Mitchell Hashimoto
afe5ec6e29 terraform: module orphans providers should inherit config 2015-06-24 17:48:31 -07:00
Paul Hinze
38efe4cb80 dot: only draw provider close on terraform greph -verbose 2015-06-24 17:36:45 -05:00
Mitchell Hashimoto
148a84cfc3 Merge pull request #2453 from hashicorp/b-orphan-deps
terraform: orphan dependencies should be inverted
2015-06-24 10:31:43 -07:00
Mitchell Hashimoto
c144491f6f Merge pull request #2457 from hashicorp/b-provider-computed
Computed provider variables properly validate
2015-06-24 10:14:35 -07:00
Mitchell Hashimoto
d0519f226d terraform: provider input should be scoped by path
The provider input before wasn't scoped by path, which caused
non-descendant parts of the graph to grab the configuration of another
sub-tree. The result is that you'd often get copied provider
configurations across the module barriers.

See GH-2024
2015-06-24 09:34:21 -07:00
Mitchell Hashimoto
1e739d1237 terraform: validate step should still set parent config for inheritence 2015-06-23 22:18:57 -07:00
Mitchell Hashimoto
772fab3609 terraform: don't config provider on validate 2015-06-23 22:14:54 -07:00
Mitchell Hashimoto
8daa459e57 terraform: tests to check behavior of computed provider configs 2015-06-23 22:02:56 -07:00
Mitchell Hashimoto
7031cb145c terraform: orphan dependencies should be inverted 2015-06-23 20:41:02 -07:00
Mitchell Hashimoto
74386655a5 terraform: test for reducing count and using splats 2015-06-23 18:25:08 -07:00
Sander van Harmelen
783fd57ec2 Merge pull request #2435 from svanharmelen/f-add-loadjson
core: add a function to load JSON directly
2015-06-23 22:38:13 +02:00
Sander van Harmelen
01a9ceeed4 Merge pull request #2406 from svanharmelen/b-close-providers-provisioners
core: close provider/provisioner connections when not used anymore
2015-06-23 22:37:10 +02:00
Sander van Harmelen
110cf8b3d4 A close provider should not be an origin node
Removed the `DotOrigin()` func after review of the PR. With this change
the PR is up-to-spec to be merged (as just discussed with Paul in IRC).
2015-06-23 22:31:44 +02:00
Sander van Harmelen
c62370f9e9 Add a function to load JSON directly
Without this 12 line function it’s impossible to use any of the
Terraform code without the need for having the files on disk. As more
and more people are using (parts of) Terraform in other software, this
seems to be a very welcome addition. It has no negative impact on
Terraform itself whatsoever (the function is never called), but it
opens up a lot of other use cases.

Next to the single new function, I renamed the existing function (and
related tests) to better reflect what the function does. So now there
is a `LoadDir` function which calls `LoadFile` for each file, which
kind of made sense to me, especially when now adding a `LoadJSON`
function as well.

But of course if the rename is a problem, I can revert that part as
it’s not related to the added `LoadJSON` function.

Thanks!
2015-06-23 16:15:26 +02:00
Radek Simko
0fc8882e29 Expose Terraform version internally & externally 2015-06-21 12:24:42 +01:00
Sander van Harmelen
0b1dbf31a3 core: close provider/provisioner connections
Currently Terraform is leaking goroutines and with that memory. I know
strictly speaking this maybe isn’t a real concern for Terraform as it’s
mostly used as a short running command line executable.

But there are a few of us out there that are using Terraform in some
long running processes and then this starts to become a problem.

Next to that it’s of course good programming practise to clean up
resources when they're not needed anymore. So even for the standard
command line use case, this seems an improvement in resource management.

Personally I see no downsides as the primary connection to the plugin
is kept alive (the plugin is not killed) and only unused connections
that will never be used again are closed to free up any related
goroutines and memory.
2015-06-19 21:52:50 +02:00
Clint Shryock
78e7519efa Updates from go generate 2015-06-03 08:37:57 -05:00
Sam Boyer
b82bd0c280 Condense switch fallthroughs into expr lists 2015-05-26 21:52:36 -04:00
Mitchell Hashimoto
b251afb5af terraform: orphan module should flatten 2015-05-14 20:54:33 -07:00
Mitchell Hashimoto
0728e25f43 terraform: env vars are lower priority 2015-05-14 09:58:30 -07:00
Mitchell Hashimoto
fe74d69852 terraform: validation should succeed if env var set [GH-1930] 2015-05-13 20:09:05 -07:00
Mitchell Hashimoto
6982ebc142 Merge pull request #1955 from ctiwald/ct/fix-vet-complaints
Fix three trivial errors 'go vet' discovered.
2015-05-13 18:24:42 -07:00
Christopher Tiwald
2252b83d9a Fix three trivial errors 'go vet' discovered. 2015-05-13 21:23:07 -04:00
Paul Hinze
842d66183b core: respect roots in CBD transform
Because CBD now runs after a RootTransformer, it's now operating on a
graph that _may_ have had a graphNodeRoot added to it (a noop node whose
only purpose is to be a root).

CBD includes a step that tells the destroy node to depend on any parents
of the create node. When one of those parents was "root", this was
causing the destroy node to depend on "root", making it cease to be an
actual root node.

Because graphNodeRoot is a singleton, the follow-up RootTransformer was
not sufficient to slap another root on top - it wasn't being seen as a
fresh node, so edges were just accumulating, and we ended up in a state
with "no roots".

refs #1903 (not sure if this will fix all the "no root found" cases, or
just the one I bumped into)
2015-05-13 17:53:42 -05:00
Paul Hinze
b0eafeb212 core: fix deadlock w/ CBD + modules
fixes #1947

Root cause was a bad edge being made by the CBD transform going from the
flattened destroy node to the unflattened create node, which was no
longer in the graph. The destroy node therefore had a dependency that
could never be satisfied, which locked up the walk.
2015-05-13 13:05:43 -05:00
Paul Hinze
63241c991b core: flatten disabled providers 2015-05-13 11:50:11 -05:00
Paul Hinze
a5e4e3de59 core: flatten orphan modules 2015-05-13 11:33:29 -05:00
Paul Hinze
9c7fb87ca8 core: flatten orphan outputs
Hit the "unflattenable node" error again with these.

This fixes it.
2015-05-12 15:10:21 -05:00
Paul Hinze
0273732dec core: make orphans flattenable
Got this while playing around in a module:

> * unflattenable node: aws_security_group.internal (orphan)
> *terraform.graphNodeOrphanResource

Basically just copied implementation from
d503cc2d82
2015-05-11 22:24:11 -05:00
Mitchell Hashimoto
f86dc22caf terraform: return unknown if resource not found 2015-05-11 14:57:20 -07:00
Mitchell Hashimoto
fc084cc03e Merge pull request #1857 from hashicorp/b-multi-mod
terraform: flattening multi-level modules works
2015-05-07 13:34:35 -07:00
Mitchell Hashimoto
6d56a2ac86 terraform: comment 2015-05-07 13:10:25 -07:00
Mitchell Hashimoto
7c3e355bb0 terraform: flattening multi-level modules works 2015-05-07 13:08:59 -07:00
Mitchell Hashimoto
6752ccfe10 terraform: only include variables in graph if count of a resource
depends
2015-05-07 10:50:56 -07:00
Mitchell Hashimoto
6b2e0b938d terraform: only omit vars on full destroys 2015-05-06 20:55:14 -07:00
Mitchell Hashimoto
19b33326be terraform: don't include variables in destroy node requirements 2015-05-06 20:13:19 -07:00
Paul Hinze
5d50264c31 core: module targeting
Adds the ability to target resources within modules, like:

module.mymod.aws_instance.foo

And the ability to target all resources inside a module, like:

module.mymod

Closes #1434
2015-05-05 21:58:48 -05:00
Paul Hinze
0fff7d1673 core: validate graph w/ diff during plan phase
This reimplements my prior attempt at nipping issues where a plan did
not yield the same cycle an apply did. My prior attempt was to have
ctx.Validate generate a "Verbose" worst-case graph. It turns out that
skipping PruneDestroyTransformer to generate this graph misses important
heuristics that prevent cycles by dropping destroy nodes that are
determined to be unused.

This resulted in Validate improperly failing in scenarios where these
heuristics would have broken the cycle.

We detected the problem during the work on #1781 and worked around the
issue by reverting to the non-Verbose graph in Validate.

This commit accomplishes the original goal in a better way - by
generating the full graph and checking it once Plan has calculated the
diff. This guarantees that any graph issue that would be caught by Apply
will be caught by Plan.
2015-05-05 17:24:44 -05:00
Mitchell Hashimoto
8c34e9a36a terraform: provisionedby prefixed 2015-05-05 13:04:27 -07:00
Mitchell Hashimoto
d503cc2d82 terraform: flattenable graphNodeMissingProvisioner 2015-05-05 12:45:28 -07:00
Mitchell Hashimoto
6d4969f64c terraform: run prune destroy on validate 2015-05-05 12:11:49 -07:00
Paul Hinze
c3ce23c7b4 core: failing test for a bad module cycle
passing output of one module into input of the following module results
in a cycle
2015-05-04 18:58:29 -05:00
Mitchell Hashimoto
13f3daa3b3 terraform: update comment on interpolater stuff 2015-05-04 10:51:34 -07:00
Mitchell Hashimoto
2f3f680505 terraform: update comment 2015-05-04 10:49:34 -07:00
Mitchell Hashimoto
cc0c208364 terraform: skip outputs for destroy graphs 2015-05-02 18:28:26 -07:00
Mitchell Hashimoto
6afc14982a terraform: destroy transform must happen globally 2015-05-02 18:21:00 -07:00
Mitchell Hashimoto
542ddb881a terraform: disable destroy mode for flattened nodes 2015-05-01 18:44:07 -07:00
Mitchell Hashimoto
bbb065d1ad terraform: add edge for missing providers 2015-05-01 18:39:24 -07:00
Mitchell Hashimoto
23b6acc29d terraform: add module destroy node to graph 2015-05-01 18:26:35 -07:00
Mitchell Hashimoto
1f10dfef2d terraform: remove test 2015-05-01 18:17:49 -07:00
Mitchell Hashimoto
8f58367680 terraform: missing providers need to do dependencies 2015-05-01 18:08:06 -07:00
Mitchell Hashimoto
7fd432b076 terraform: providers in flattened graphs should depend on the parent 2015-05-01 16:41:49 -07:00
Mitchell Hashimoto
c207beda36 terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
Mitchell Hashimoto
94e1bab65d terraform: fill in more flat interfaces 2015-05-01 15:28:41 -07:00
Mitchell Hashimoto
416e7a2077 terraform: missing provider should be flattenable 2015-05-01 15:23:37 -07:00
Mitchell Hashimoto
86d07d3b5b terraform: redo how flattening works 2015-05-01 15:18:40 -07:00
Mitchell Hashimoto
f2e7f505d4 terraform: subpath context setting 2015-05-01 14:19:32 -07:00
Mitchell Hashimoto
9a54dddc85 terraform: eval for variables 2015-05-01 14:10:41 -07:00
Mitchell Hashimoto
e544e1d401 terraform: hook up the proxies 2015-05-01 11:45:42 -07:00
Mitchell Hashimoto
7d28e980a5 terraform: proxy uses custom edge 2015-05-01 11:41:01 -07:00
Mitchell Hashimoto
f24a1533f2 terraform: GraphNodeProxy 2015-05-01 11:38:36 -07:00
Mitchell Hashimoto
a0d9bc0f19 terraform: outputs connect properly 2015-05-01 11:26:58 -07:00
Mitchell Hashimoto
7e838dfae2 terraform: Graph should overrride Remove to clear lookaside 2015-05-01 11:20:57 -07:00
Mitchell Hashimoto
dd14ce9a0b terraform: test that variable deps reach out to parent graph 2015-05-01 11:09:23 -07:00
Mitchell Hashimoto
e542d6efdf terraform: test to verify config variables are variables 2015-05-01 10:56:46 -07:00
Mitchell Hashimoto
3bfef7c374 terraform: wrap variable values and prefix dependencies
(untested yet)
2015-05-01 10:56:05 -07:00
Mitchell Hashimoto
12c30feb0f terraform: start FlattenGraph impl. 2015-04-30 20:46:54 -07:00
Mitchell Hashimoto
5e767f63b9 terraform: move module to its own file 2015-04-30 19:23:52 -07:00
Mitchell Hashimoto
15ca84a682 terraform: module dependencies in graph use full name (FOR THE FUTURE) 2015-04-30 17:19:01 -07:00
Mitchell Hashimoto
90cfade626 terraform: naive flatten 2015-04-30 17:02:39 -07:00
Mitchell Hashimoto
1152ff562b terraform: add variables as graph nodes (no eval yet) 2015-04-30 16:27:20 -07:00
Paul Hinze
430e00c55c Merge pull request #1763 from hashicorp/b-fix-1699
core: fix targeting with non-word chars
2015-04-30 16:34:19 -05:00
Paul Hinze
d30d88e327 Merge pull request #1655 from hashicorp/f-build-graph-during-plan
core: validate on verbose graph to detect some cycles earlier
2015-04-30 16:08:33 -05:00
Paul Hinze
443c7e053f Merge pull request #1544 from hashicorp/b-destroy-target-provisioner
core: fix resource targeting w/ provisioners
2015-04-30 16:03:17 -05:00
Paul Hinze
9295e1eca6 core: fix targeting with non-word chars
Flips the regex strategy to capture everything that's _not_ the next
separator instead of whitelisting `\w`

fixes #1699
2015-04-30 15:49:37 -05:00
Mitchell Hashimoto
873f5a91bb terraform: EvalDeleteOutput and context test 2015-04-29 11:27:12 -07:00
Mitchell Hashimoto
2ca181d42d terraform: add output orphan transformer 2015-04-29 11:18:58 -07:00
Paul Hinze
ce49dd6080 core: graph command gets -verbose and -draw-cycles
When you specify `-verbose` you'll get the whole graph of operations,
which gives a better idea of the operations terraform performs and in
what order.

The DOT graph is now generated with a small internal library instead of
simple string building. This allows us to ensure the graph generation is
as consistent as possible, among other benefits.

We set `newrank = true` in the graph, which I've found does just as good
a job organizing things visually as manually attempting to rank the nodes
based on depth.

This also fixes `-module-depth`, which was broken post-AST refector.
Modules are now expanded into subgraphs with labels and borders. We
have yet to regain the plan graphing functionality, so I removed that
from the docs for now.

Finally, if `-draw-cycles` is added, extra colored edges will be drawn
to indicate the path of any cycles detected in the graph.

A notable implementation change included here is that
{Reverse,}DepthFirstWalk has been made deterministic. (Before it was
dependent on `map` ordering.) This turned out to be unnecessary to gain
determinism in the final DOT-level implementation, but it seemed
a desirable enough of a property that I left it in.
2015-04-27 09:23:47 -05:00
Paul Hinze
5e67657325 core: fix targeting in destroy w/ provisioners
The `TargetTransform` was dropping provisioner nodes, which caused graph
validation to fail with messages about uninitialized provisioners when a
`terraform destroy` was attempted.

This was because `destroy` flops the dependency calculation to try and
address any nodes in the graph that "depend on" the target node. But we
still need to keep the provisioner node in the graph.

Here we switch the strategy for filtering nodes to only drop
addressable, non-targeted nodes. This should prevent us from having to
whitelist nodes to keep in the future.

closes #1541
2015-04-27 08:36:54 -05:00
Paul Hinze
d4b9362518 core: validate on verbose graph to detect some cycles earlier
Most CBD-related cycles include destroy nodes, and destroy nodes were
all being pruned from the graph before staring the Validate walk.

In practice this meant that we had scenarios that would error out with
graph cycles on Apply that _seemed_ fine during Plan.

This introduces a Verbose option to the GraphBuilder that tells it to
generate a "worst-case" graph. Validate sets this to true so that cycle
errors will always trigger at this step if they're going to happen.

(This Verbose option will be exposed as a CLI flag to `terraform graph`
in a second incoming PR.)

refs #1651
2015-04-23 11:07:13 -05:00
Mitchell Hashimoto
af4396aa0d Merge pull request #1621 from hashicorp/f-envs
Set variables from env vars
2015-04-22 15:50:56 +02:00
Mitchell Hashimoto
d2011438f7 Merge pull request #1587 from hashicorp/b-count-deps
terraform: inner-count dependencies work [GH-1540]
2015-04-22 08:10:24 +02:00
Mitchell Hashimoto
5ae9ee4d27 terraform: allow TF_VAR_name to be set to set variables 2015-04-22 06:31:53 +02:00
Mitchell Hashimoto
fa934d96d0 helper/schema: FieldReaderConfig detects computed maps 2015-04-21 22:07:52 +02:00
Mitchell Hashimoto
d3689cea29 terraform: test input with multiple providers 2015-04-20 14:59:03 -07:00
Mitchell Hashimoto
de004d7183 terraform: context test for when provider is missing from state 2015-04-20 14:54:25 -07:00