Commit Graph

24371 Commits

Author SHA1 Message Date
Martin Atkins fa0d6484df configs/configupgrade: Detect and fix element(...) usage with sets
Although sets do not have indexed elements, in Terraform 0.11 and earlier
element(...) would work with sets because we'd automatically convert them
to lists on entry to HIL -- with an arbitrary-but-consistent ordering --
and this return an arbitrary-but-consistent element from the list.

The element(...) function in Terraform 0.12 does not allow this because it
is not safe in general, but there was an existing pattern relying on this
in Terraform 0.11 configs which this upgrade rule is intended to preserve:

    resource "example" "example" {
      count = "${length(any_set_attribute)}"

      foo = "${element(any_set_attribute, count.index}"
    }

The above works because the exact indices assigned in the conversion are
irrelevant: we're just asking Terraform to create one resource for each
distinct element in the set.

This upgrade rule therefore inserts an explicit conversion to list if it
is able to successfully provide that the given expression will return a
set type:

    foo = "${element(tolist(any_set_attribute), count.index}"

This makes the conversion explicit, allowing users to decide if it is
safe and rework the configuration if not. Since our static type analysis
functionality focuses mainly on resource type attributes, in practice this
rule will only apply when the given expression is a statically-checkable
resource reference. Since sets are an SDK-only concept in Terraform 0.11
and earlier anyway, in practice that works out just right: it's not
possible for sets to appear anywhere else in older versions anyway.
2019-02-21 09:39:55 -08:00
Radek Simko 3d0b6bff07
vendor: github.com/spf13/afero@v1.2.1
go get github.com/spf13/afero@v1.2.1
go mod tidy
go mod vendor
2019-02-21 09:09:22 +00:00
Radek Simko 52b38a486a
vendor: github.com/posener/complete@v1.2.1
go get github.com/posener/complete@v1.2.1
go mod tidy
go mod vendor
2019-02-21 09:07:42 +00:00
Radek Simko c9e6bc4937
vendor: github.com/mitchellh/prefixedio@5733675afd51
go get github.com/mitchellh/prefixedio@5733675afd51
go mod tidy
go mod vendor
2019-02-21 09:02:56 +00:00
Radek Simko 235947345a
vendor: github.com/mitchellh/panicwrap@17011010aaa4
go get github.com/mitchellh/panicwrap@17011010aaa4
go mod tidy
go mod vendor
2019-02-21 09:01:10 +00:00
Radek Simko 8005e39a0a
vendor: github.com/mitchellh/go-linereader@1b945b3263eb
go get github.com/mitchellh/go-linereader@1b945b3263eb
go mod tidy
go mod vendor
2019-02-21 08:59:37 +00:00
Radek Simko 89ec2edc60
vendor: github.com/mitchellh/colorstring@d06e56a500db
go get github.com/mitchellh/colorstring@d06e56a500db
go mod tidy
go mod vendor
2019-02-21 08:57:51 +00:00
Radek Simko dd252355c5
vendor: github.com/mitchellh/cli@v1.0.0
go get github.com/mitchellh/cli@v1.0.0
go mod tidy
go mod vendor
2019-02-21 08:56:05 +00:00
Radek Simko 1feb7717a8
vendor: github.com/hashicorp/go-rootcerts@v1.0.0
go get github.com/hashicorp/go-rootcerts@v1.0.0
go mod tidy
go mod vendor
2019-02-21 08:54:14 +00:00
Radek Simko b43e5e83f5
vendor: github.com/hashicorp/go-getter@v1.1.0
go get github.com/hashicorp/go-getter@v1.1.0
go mod tidy
go mod vendor
2019-02-21 08:52:47 +00:00
Radek Simko 725dfe8a54
vendor: github.com/hashicorp/go-checkpoint@v0.5.0
go get github.com/hashicorp/go-checkpoint@v0.5.0
go mod tidy
go mod vendor
2019-02-21 08:50:02 +00:00
Radek Simko 03dc37fda2
vendor: github.com/armon/circbuf@5111143e8da2
go get github.com/armon/circbuf@5111143e8da2
go mod tidy
go mod vendor
2019-02-21 08:48:13 +00:00
Radek Simko a286e759d2
vendor: github.com/apparentlymart/go-dump@042adf3cf4a0
go get github.com/apparentlymart/go-dump@042adf3cf4a0
go mod tidy
go mod vendor
2019-02-21 08:45:27 +00:00
Radek Simko 4ab701620e
Merge pull request #20326 from hashicorp/vendor-grpc-go-bump
vendor: Bump google.golang.org/grpc & cloud.google.com/go & oauth2
2019-02-21 07:29:12 +00:00
Nick Fagerlund 4a19b53b55 website: Fix confusing indentation issues in configuration representation 2019-02-20 18:49:06 -08:00
Nick Fagerlund 0a58004da4 website: Add JSON output format to nav sidebar 2019-02-20 18:40:44 -08:00
Nick Fagerlund 92e609c98b website: Revise json format doc 2019-02-20 18:40:44 -08:00
Nick Fagerlund c2979e7278 website: fix JSON typo (resources is array of objects) 2019-02-20 18:40:44 -08:00
Nick Fagerlund ff47cab8c7 website: Fix JSON typo (child_modules is array) 2019-02-20 18:40:39 -08:00
Nick Fagerlund f6c5e33c00 website: fix highlighting and line breaks 2019-02-20 18:40:39 -08:00
Nick Fagerlund 7ba654a8a9 website: Revise show command docs 2019-02-20 18:40:31 -08:00
Martin Atkins 085ac6d8ca configs/configupgrade: Test for removing commas between block arguments
The comma-separated syntax is now reserved only for object constructor
expressions in attribute values, so the upgrade tool rewrites block
arguments to be newline-separated instead.

This was already working but we didn't have an explicit test for it until
now.
2019-02-20 16:11:14 -08:00
Martin Atkins 54bb0b1e25 configs/configupgrade: Silently ignore and trim .% .# in ignore_changes
Prior to Terraform 0.12, ignore_changes was implemented in a
flatmap-oriented fashion and so users found that they could (and in fact,
were often forced to) use the internal .% and .# suffixes flatmap uses to
ignore changes to the number of elements in a list or map.

Terraform 0.12 no longer uses that representation, so we'll interpret
ignoring changes to the length as ignoring changes to the entire
collection. While this is not a totally-equivalent change, in practice
this pattern was most often used in conjunction with specific keys from a
map in order to _effectively_ ignore the entire map, even though Terraform
didn't really support that.
2019-02-20 15:58:44 -08:00
Kristin Laemmert 0c94e20a83
command/show enhancements and bugfixes
* command/jsonconfig: provider config marshaling enhancements

This PR fixes a bug wherein the keys in "provider_config" were the
"addrs.ProviderConfig", and therefore being overwritten for each module,
instead of the intended "addrs.AbsProviderConfig".

We realized that there was still opportunity for ambiguity, for example
if a user made a provider alias that was the same name as a module, so
we opted to use the syntax `modulename:providername(.provideralias)`

* command/json*: fixed a bug where we were attempting to lookup schemas
with the provider name, instead of provider type.
2019-02-20 14:27:49 -08:00
Martin Atkins 1d35233a03 configs/configupgrade: Fix up internal HIL conversion functions
HIL implemented its type conversions by rewriting its AST to include calls
to some undocumented builtin functions. Unfortunately those functions were
still explicitly callable if you could figure out the name for them, and
so they may have been used in the wild.

In particular, __builtin_StringToFloat was used as part of a workaround
for a HIL design flaw where it would prefer to convert strings to integers
rather than floats when performing arithmetic operations. This issue was,
indeed, the main reason for unifying int ant float into a single number
type in HCL. Since we published that as a suggested workaround, the
upgrade tool ought to fix it up.

The other cases have never been documented as a workaround, so they are
less likely to appear in the wild, but we might as well fix them up anyway
since we already have the conversion functions required to get the same
result in the new language.

To be safe/conservative, most of these convert to _two_ function calls
rather than just one, which ensures that these new expressions retain the
behavior of implicitly converting to the source type before running the
conversion. The new conversion functions only specify target type, and so
cannot guarantee identical results if the argument type does not exactly
match what was previously given as the parameter type in HIL.
2019-02-20 14:01:53 -08:00
James Bardin d7641c0816
Merge pull request #20399 from hashicorp/jbardin/ssh-key-error
remove ssh private key contents from errors
2019-02-20 16:03:09 -05:00
Martin Atkins 154911688a configs/configupgrade: upgrade expressions inside heredocs
HEREDOC tokens are a little more fussy than normal string sequences
because we need to preserve the whitespace within them along with the
start and end markers while we upgrade any interpolated expressions inside.

We need to do some work locally here because the HCL heredoc processing
"does too much" and throws away information we need to do a faithful
upgrade.

We also need to contend with the fact that Terraform <=0.11 had an older
version of HCL that accidentally permitted a degenerate form of heredoc
where the marker was at the end of the final line, like this:

    degenerate = <<EOT
    this should never have workedEOT

When we migrate this, we'll introduce the additional newline that is now
required, which will unfortunately slightly change the result string to
include a newline when parsed by 0.12, and so we'll need to call this out
as a caveat in the upgrade guide.
2019-02-20 12:56:44 -08:00
James Bardin 0d6230db12
Merge pull request #20397 from hashicorp/jbardin/init-error
move provider init error to where it is generated
2019-02-20 15:12:43 -05:00
James Bardin f68a1a9c76 remove ssh private key contents from errors
A misformatted private key may fail to parse correctly, but might still
contain sensitive data. Don't display the private key in any error
messages.
2019-02-20 15:05:19 -05:00
James Bardin 44afe5b6ff remove unused ResourceProviderError 2019-02-20 14:23:56 -05:00
James Bardin 6cc3e1d0bd move init error to where it is generated
The init error was output deep in the backend by detecting a
special ResourceProviderError and formatted directly to the CLI.

Create some Diagnostics closer to where the problem is detected, and
passed that back through the normal diagnostic flow. While the output
isn't as nice yet, this restores the helpful error message and makes the
code easier to maintain. Better formatting can be handled later.
2019-02-20 14:18:37 -05:00
Radek Simko 876d548bc1
vendor: golang.org/x/oauth2@latest
go get golang.org/x/oauth2@latest
go mod tidy
go mod vendor
2019-02-20 18:59:25 +00:00
Radek Simko df089ee2fb
vendor: cloud.google.com/go@v0.36.0
go get cloud.google.com/go@v0.36.0
go mod tidy
go mod vendor
2019-02-20 18:57:56 +00:00
Radek Simko 5ede0bf925
vendor: google.golang.org/grpc@v1.18.0
go get google.golang.org/grpc@v1.18.0
go mod tidy
go mod vendor
2019-02-20 18:51:33 +00:00
Alexis Grant 3db95d510a
Merge pull request #20385 from hashicorp/fix-provider-name-syntax
Fix structure for provider names in terraform-bundle README: an underscore is required before the version
2019-02-20 10:46:23 -08:00
Brian Flad 626022670e
Update CHANGELOG for #20374 2019-02-20 08:49:14 -08:00
James Bardin 9bd7419fce
Merge pull request #20395 from hashicorp/jbardin/go-plugin
update go-plugin
2019-02-20 11:44:38 -05:00
Brian Flad 185a3304e5
Merge pull request #20374 from hashicorp/td-backend-s3-dependencies
backend/s3: Switch from github.com/terraform-providers/terraform-provider-aws to github.com/hashicorp/aws-sdk-go-base
2019-02-20 08:42:07 -08:00
Brian Flad a41e545198
backend/s3: Reinstate region validation and update copy for skip_requesting_account_id deprecation message 2019-02-20 08:29:09 -08:00
James Bardin 493ee39f23 update go-plugin 2019-02-20 11:24:05 -05:00
Sander van Harmelen 3376e6ef2e
Update CHANGELOG.md 2019-02-20 10:49:12 +01:00
Sander van Harmelen 43eb7c08e0
Merge pull request #20379 from hashicorp/svh/f-state-service
backend/remote: use `state.v2` for remote state only
2019-02-20 10:48:05 +01:00
Kristin Laemmert b14472f22c
command/jsonconfig: add missing fields from configuration output (#20387)
Display depends_on for resources and outputs, and description for
outputs.
2019-02-19 16:31:10 -08:00
Paddy 1bef862e3a
Merge pull request #18972 from rileykarson/patch-2
Fix Google Cloud Platform name across docs
2019-02-19 15:50:46 -08:00
Kristin Laemmert 874b333962
command/format: fix an issue where data resources were not displaying (#20386)
Fixes #20245
2019-02-19 14:18:47 -08:00
Kristin Laemmert c59a274e96
command/jsonplan: "deposed" should be a string, not a bool. (#20351) 2019-02-19 13:55:49 -08:00
Alexis Grant d3af3cb61e
Update README.md 2019-02-19 11:42:35 -08:00
Brian Flad 43f12bbfe0
backend/s3: Update copy for skip_get_ec2_platforms and skip_requesting_account_id argument deprecations 2019-02-19 10:54:53 -08:00
Kristin Laemmert 818b4ec068
command/show: add "module_version" to "module_calls" in config (#20367)
* command/show: add "module_version" to "module_calls" in config portion
of `terraform show`.

Also extended the `terraform show -json` test to run `init` so we could
add examples with modules. This does _not_ test the "module_version"
yet, but it _did_ help expose a bug in jsonplan where modules were
duplicated. This is also fixed in this PR.

* command/jsonconfig: rename version to version_constraint and
resolved_source to source.
2019-02-19 08:12:33 -08:00
Sander van Harmelen 54736b068b backend/remote: use `state.v2` for remote state only
The API surface area is much smaller when we use the remote backend for remote state only.

So in order to try and prevent any backwards incompatibilities when TF runs inside of TFE, we’ve split up the discovery services into `state.v2` (which can be used for remote state only configurations, so when running in TFE) and `tfe.v2.1` (which can be used for all remote configurations).
2019-02-19 10:59:51 +01:00