terraform/configs
Martin Atkins b90fb25321 experiments: a mechanism for opt-in experimental language features
Traditionally we've preferred to release new language features in major
releases only, because we can then use the beta cycle to gather feedback
on the feature and learn about any usability challenges or other
situations we didn't consider during our design in time to make those
changes before inclusion in a stable release.

This "experiments" feature is intended to decouple the feedback cycle for
new features from the major release rhythm, and thus allow us to release
new features in minor releases by first releasing them as experimental for
a minor release or two, adjust for any feedback gathered during that
period, and then finally remove the experiment gate and enable the feature
for everyone.

The intended model here is that anything behind an experiment gate is
subject to breaking changes even in patch releases, and so any module
using these experimental features will be broken by a future Terraform
upgrade.

The behavior implemented here is:

- Recognize a new "experiments" setting in the "terraform" block which
  allows module authors to explicitly opt in to experimental features.

  terraform {
    experiments = [resource_for_each]
  }

- Generate a warning whenever loading a module that has experiments
  enabled, to avoid accidentally depending on experimental features and
  thus risking unexpected breakage on next Terraform upgrade.

- We check the enabled experiments against the configuration at module
  load time, which means that experiments are scoped to a particular
  module. Enabling an experiment in one module does not automatically
  enable it in any other module.

This experiments mechanism is itself an experiment, and so I'd like to
use the resource for_each feature to trial it. Because any configuration
using experiments is subject to breaking changes, we are free to adjust
this experiments feature in future releases as we see fit, but once
for_each is shipped without an experiment gate we'll be blocked from
making significant changes to it until the next major release at least.
2019-12-10 09:27:05 -08:00
..
configload Merge pull request #22946 from hashicorp/kmoe/copy_dir_dotfiles 2019-10-24 12:01:42 -04:00
configschema Version tools per Go convention under tools.go 2019-10-17 22:23:39 +02:00
configupgrade providers: use addrs.Provider as map keys for provider.Factory (#23548) 2019-12-04 11:30:20 -05:00
hcl2shim vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
testdata experiments: a mechanism for opt-in experimental language features 2019-12-10 09:27:05 -08:00
backend.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
compat_shim.go configs: Warn for deprecated interpolation and quoted type constraints 2019-11-13 07:55:55 -08:00
config.go addrs: replace "Type string" with "Type Provider" in ProviderConfig 2019-12-06 08:00:18 -05:00
config_build.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
config_build_test.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
config_test.go Standardise directory name for test data 2019-06-30 10:16:15 +02:00
depends_on.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
doc.go configs: Additional guidance in doc.go 2018-02-15 15:56:39 -08:00
experiments.go experiments: a mechanism for opt-in experimental language features 2019-12-10 09:27:05 -08:00
experiments_test.go experiments: a mechanism for opt-in experimental language features 2019-12-10 09:27:05 -08:00
module.go experiments: a mechanism for opt-in experimental language features 2019-12-10 09:27:05 -08:00
module_call.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
module_call_test.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
module_merge.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
module_merge_body.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
module_merge_test.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
named_values.go configs: Warn for deprecated interpolation and quoted type constraints 2019-11-13 07:55:55 -08:00
parser.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
parser_config.go experiments: a mechanism for opt-in experimental language features 2019-12-10 09:27:05 -08:00
parser_config_dir.go fix diagnostics handling 2019-11-21 09:14:50 -05:00
parser_config_dir_test.go move IsEmptyDir to configs package 2019-07-18 13:07:10 -04:00
parser_config_test.go configs: Emit warnings for deprecated quoted references/keywords 2019-11-11 10:17:34 -08:00
parser_test.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
parser_values.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
parser_values_test.go configs: update values file invalid syntax test for new HCL behavior 2018-03-08 11:17:39 -08:00
provider.go addrs: replace "Type string" with "Type Provider" in ProviderConfig 2019-12-06 08:00:18 -05:00
provider_test.go Standardise directory name for test data 2019-06-30 10:16:15 +02:00
provisioner.go update destroy provisioner warning text 2019-12-06 10:20:23 -05:00
provisioneronfailure_string.go stringer: Regenerate files with latest version 2019-05-13 15:34:27 +01:00
provisionerwhen_string.go stringer: Regenerate files with latest version 2019-05-13 15:34:27 +01:00
resource.go addrs: replace "Type string" with "Type Provider" in ProviderConfig 2019-12-06 08:00:18 -05:00
synth_body.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
synth_body_test.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
util.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
variable_type_hint.go Version tools per Go convention under tools.go 2019-10-17 22:23:39 +02:00
variabletypehint_string.go stringer: Regenerate files with latest version 2019-05-13 15:34:27 +01:00
version_constraint.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00