Commit Graph

24371 Commits

Author SHA1 Message Date
Martin Atkins 5661ab5991 configs: allow full type constraints for variables
Previously we just ported over the simple "string", "list", and "map" type
hint keywords from the old loader, which exist primarily as hints to the
CLI for whether to treat -var=... arguments and environment variables as
literal strings or as HCL expressions.

However, we've been requested before to allow more specific constraints
here because it's generally better UX for a type error to be detected
within an expression in a calling "module" block rather than at some point
deep inside a third-party module.

To allow for more specific constraints, here we use the type constraint
expression syntax defined as an extension within HCL, which uses the
variable and function call syntaxes to represent types rather than values,
like this:
 - string
 - number
 - bool
 - list(string)
 - list(any)
 - list(map(string))
 - object({id=string,name=string})

In native HCL syntax this looks like:

    variable "foo" {
      type = map(string)
    }

In JSON, this looks like:

    {
      "variable": {
        "foo": {
          "type": "map(string)"
        }
      }
    }

The selection of literal processing or HCL parsing of CLI-set values is
now explicit in the model and separate from the type, though it's still
derived from the type constraint and thus not directly controllable in
configuration.

Since this syntax is more complex than the keywords that replaced it, for
now the simpler keywords are still supported and "list" and "map" are
interpreted as list(any) and map(any) respectively, mimicking how they
were interpreted by Terraform 0.11 and earlier. For the time being our
documentation should continue to recommend these shorthand versions until
we gain more experience with the more-specific type constraints; most
users should just make use of the additional primitive type constraints
this enables: bool and number.

As a result of these more-complete type constraints, we can now type-check
the default value at config load time, which has the nice side-effect of
allowing us to produce a tailored error message if an override file
produces an invalid situation; previously the result was rather confusing
because the error message referred to the original definition of the
variable and not the overridden parts.
2018-03-08 16:23:35 -08:00
Seth Vargo 12f8c90a51 website: Recommend SVG instead of PNG for graph output 2018-03-08 16:22:21 -08:00
Martin Atkins c05a1050fc configs: Disable deprecation warning for quoted keywords/references
Although we do still consider these deprecated for 0.12, we'll defer
actually generating warnings for them until a later minor release so that
module authors can retain their quoted identifiers for a period after 0.12
release for backward-compatibility with Terraform 0.11.
2018-03-08 15:42:47 -08:00
Martin Atkins a26ff56f01 configs: highlight resource name in diags when invalid
Previously we were erroneously highlighting the resource type name instead.
2018-03-08 15:41:19 -08:00
James Bardin f825a2118b
Merge pull request #17513 from hashicorp/jbardin/GH-17509
Check for nil config in node_resource_refresh
2018-03-08 18:12:13 -05:00
Martin Atkins 3cec7dc595
Merge #17533: Update "HCL2" and cty dependencies 2018-03-08 14:49:25 -08:00
Martin Atkins 7549ce15f0 configs: update values file invalid syntax test for new HCL behavior
The error-handling behavior of the HCL parser was improved, which causes
the number of diagnostics and the diagnostics messages to be different
in cases where a block-like introduction is given but without any
following body.
2018-03-08 11:17:39 -08:00
Martin Atkins 59a49c6b3f vendor: update hcl2 and cty
This is largely minor bugfixes for issues found since we last updated the
vendoring. There are some new features here that Terraform is not yet
using and thus present little risk.

In particular this includes the HCL-JSON spec change where arrays can now
be used at any level in a block label structure, to allow for preserving
the relative order of blocks.
2018-03-08 11:10:34 -08:00
James Bardin 5727d33352
Merge pull request #17531 from hashicorp/jbardin/null-output
filter null output values from state
2018-03-08 13:29:02 -05:00
James Bardin 13433687cb filter null output values from state
While null values should not normally appear in a state file, we should
filter the values rather than crash.
2018-03-08 11:39:29 -05:00
Ryosuke Sato f5b6c529ef
Update README.md 2018-03-08 17:41:51 +09:00
Ryosuke Sato 0940a3458a
Remove contrib/zsh-completion/ because the configution is too old 2018-03-08 17:38:03 +09:00
Paul Tyng a61b40c7a2
Merge pull request #17517 from ivanovteo/ivanovteo/docs-providers-small-typo
Trivial documentation fix
2018-03-07 11:15:23 -05:00
Andrei Ivanov 53110e5c1f - fixed a trivial typo 2018-03-07 17:57:25 +02:00
James Bardin 7fd6f97899 Check for nil config in node_resource_refresh
While not normally possible, manual manipulation of the state and config
can cause us to end up with a nil config in
evalTreeManagedResourceNoState.

Regardless of how it got here, we can't ever assume the Config field is
not nil, and EvalInterpolate happily accepts a nil RawConfig
2018-03-06 17:53:09 -05:00
Martin Atkins ea50f455ed
Update CHANGELOG.md 2018-03-05 16:00:19 -08:00
Kristiyan Nikolov 999f9096c1 provisioner/local-exec: Allow passing environment variables 2018-03-05 15:58:49 -08:00
Chris Griggs dd3d9e298d website: two more community providers 2018-03-05 15:40:54 -08:00
Chris Griggs 6f98b4d4be website: two more community providers 2018-03-05 15:40:08 -08:00
Norman Joyner 2184ba1ed0
fix grammar in description 2018-03-03 11:04:56 -05:00
Anthony Galea 664391c254 website: fix various typos 2018-03-02 09:16:01 -08:00
Brian Flad ea64b24cd9 validation: Add ValidateRFC3339TimeString 2018-03-01 23:19:07 -05:00
Radek Simko ccf8a31cbb
helper/schema: Allow ResourceDiff.ForceNew on nested fields (avoid crash) 2018-03-01 15:51:01 +00:00
Paul Tyng 26058acdef
Merge pull request #17467 from paultyng/pt/useragent
Standardize on User-Agent usage for registry, provider downloads, etc.
2018-03-01 09:13:39 -05:00
Chris Griggs 445be03916 website: Link to MongoDB Atlas community provider 2018-02-28 16:49:58 -08:00
Nick Fagerlund 46754c9917 website: Deprecation notes about "terraform push"
Also:

- In the getting started guide, the TFE content was all tailored to the older
  run-locally workflow. I've replaced it with some brief explanation and a link
  to the dedicated TFE getting started guide.
- Fixed a sidebar link glitch in the configuration section. (Both "Terraform"
  and "Terraform Enterprise" were marked as active if you were on the TFE page.)
- Renamed the "Terraform Enterprise" page "Terraform Push." (Some people have
  gotten confused and landed on this page when trying to set up the `atlas`
  remote backend.)
2018-02-28 16:49:50 -08:00
Chris Griggs 1da2152482 website: Link to MongoDB Atlas community provider 2018-02-28 16:47:56 -08:00
Paul Tyng c868092d2d
Standardize http.Client creation with User-Agent 2018-02-28 12:09:50 -05:00
Paul Tyng 344e8fca05
Relax typing to allow for http.RoundTripper 2018-02-28 11:40:17 -05:00
Nick Fagerlund 66ff8f8bed website: Deprecation notes about "terraform push"
Also:

- In the getting started guide, the TFE content was all tailored to the older
  run-locally workflow. I've replaced it with some brief explanation and a link
  to the dedicated TFE getting started guide.
- Fixed a sidebar link glitch in the configuration section. (Both "Terraform"
  and "Terraform Enterprise" were marked as active if you were on the TFE page.)
- Renamed the "Terraform Enterprise" page "Terraform Push." (Some people have
  gotten confused and landed on this page when trying to set up the `atlas`
  remote backend.)
2018-02-27 14:48:04 -08:00
James Bardin dc8036636a
Merge pull request #17422 from hashicorp/jbardin/state-locking
Add StateLocker interface to backend operations
2018-02-27 11:38:55 -05:00
James Bardin 2b97585d46 improve clistate.Locker docs 2018-02-27 10:49:06 -05:00
azban 3f2f07d5d0 website: don't document unimplemented salt-masterless grains_file 2018-02-26 11:06:25 -08:00
Martin Atkins fe3a5f100d
Update CHANGELOG.md 2018-02-26 10:55:45 -08:00
Uriel Corfa 07a20365de cli: "terraform state list" -id argument
A new -id option to "terraform state list" which constraints the output of the command to resources whose id is equal to the flag value.
2018-02-26 10:54:48 -08:00
James Bardin 81dc23c65d
Merge pull request #17434 from NikkeiFTLearning/saltstack-race-problem
fix ssh problem with communicator.Retry
2018-02-26 09:56:13 -05:00
Paweł Socha be8d39210d Wait for ssh connection 2018-02-26 15:40:26 +01:00
Brian Flad 7bb2c17630
Merge pull request #17428 from hashicorp/v-terraform-provider-aws-v1.10.0
Deps: Bump terraform-provider-aws@v1.10.0 and aws-sdk-go@v1.12.75
2018-02-26 03:37:00 -08:00
Paweł Socha 627bb24ea6 fix ssh problem with communicator.Retry 2018-02-26 10:27:14 +01:00
Oscar Utbult 7434cd0a81 Use io.SeekStart instead of deprecated os.SEEK_SET 2018-02-25 23:11:40 +01:00
Brian Flad 8ee936a068 Deps: Bump terraform-provider-aws@v1.10.0 and aws-sdk-go@v1.12.75 2018-02-24 19:52:10 -08:00
James Bardin bdd475e149 use the new clistate.Locker in commands
Use the new StateLocker field to provide a wrapper for locking the state
during terraform.Context creation in the commands that directly
manipulate the state.
2018-02-23 16:48:15 -05:00
James Bardin e9a76808df create clistate.Locker interface
Simplify the use of clistate.Lock by creating a clistate.Locker
instance, which stores the context of locking a state, to allow unlock
to be called without knowledge of how the state was locked.

This alows the backend code to bring the needed UI methods to the point
where the state is locked, and still unlock the state from an outer
scope.

Provide a NoopLocker as well, so that callers can always call Unlock
without verifying the status of the lock.

Add the StateLocker field to the backend.Operation, so that the state
lock can be carried between the different function scopes of the backend
code. This will allow the backend context to lock the state before it's
read, while allowing the different operations to unlock the state when
they complete.
2018-02-23 16:48:15 -05:00
Martin Atkins 9cf5350590
Update CHANGELOG.md 2018-02-23 10:50:18 -08:00
James Bardin 12bda53558 Revert "create clistate.Locker interface"
This reverts commit e88bd74bb7.
2018-02-23 11:31:13 -05:00
James Bardin 626c5ed672 Revert "add backend.Operation.StateLocker"
This reverts commit d3f7edeb27.
2018-02-23 11:31:12 -05:00
James Bardin 1d9adc3b72 Revert "use the new clistate.Locker in the local backend"
This reverts commit 0b804a9686.
2018-02-23 11:31:10 -05:00
James Bardin 3de0d24554 Revert "use the new clistate.Locker in commands"
This reverts commit 400f6ca4c5.
2018-02-23 11:31:06 -05:00
James Bardin 400f6ca4c5 use the new clistate.Locker in commands
Use the new StateLocker field to provide a wrapper for locking the state
during terraform.Context creation in the commands that directly
manipulate the state.
2018-02-23 11:28:47 -05:00
James Bardin 0b804a9686 use the new clistate.Locker in the local backend
Use the new StateLocker field to provide a wrapper for locking the state
during terraform.Context creation. We can then remove all the state
locking code from individual operations, and unlock them in one place
inside the main Operation method.
2018-02-23 11:28:13 -05:00