terraform/helper/schema
Martin Atkins 37da625ee9 helper/schema: Tell Core attribute is optional if set conditionally
The SDK has a mechanism that effectively makes it possible to declare an
attribute as being _conditionally_ required, which is not a concept that
Terraform Core is aware of.

Since this mechanism is in practice only used for a small UX improvement
in prompting for these values interactively when the environment variable
is not set, we avoid here introducing all of this complexity into the
plugin protocol by just having the provider selectively modify its schema
if it detects that such an attribute might be set dynamically.

This then prevents Terraform Core from validating the presence of the
argument or prompting for a new value for it, allowing the null value to
pass through into the provider so that the default value can be generated
again dynamically.

This is a kinda-kludgey solution which we're accepting here because the
alternative would be a much-more-complex two-pass decode operation within
Core itself, and that doesn't seem worth it.

This fixes #19139.
2018-11-26 17:11:34 -08:00
..
README.md helper/schema: README 2014-08-17 20:51:09 -07:00
backend.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
backend_test.go backend: Update interface and implementations for new config loader 2018-10-16 18:39:12 -07:00
core_schema.go helper/schema: Tell Core attribute is optional if set conditionally 2018-11-26 17:11:34 -08:00
core_schema_test.go helper/schema: Tell Core attribute is optional if set conditionally 2018-11-26 17:11:34 -08:00
data_source_resource_shim.go Deprecated -> DeprecationMessage. 2018-06-20 11:21:46 -07:00
equal.go helper/schema: use interface for equality check 2015-01-16 09:32:15 -08:00
field_reader.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_config.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_config_test.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_diff.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_diff_test.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_map.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_map_test.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_reader_multi.go helper/schema: full object test for addrToSchema 2015-01-09 17:43:44 -08:00
field_reader_multi_test.go Revert "helper/schema: Make nested Set(s) in List(s) work" (#7436) 2016-06-30 10:48:52 -05:00
field_reader_test.go helper/schema: handle TypeMap elem consistently with other collection types 2018-03-14 14:50:41 -07:00
field_writer.go helper/schema: FieldWriter, replace Set 2015-01-10 11:44:26 -08:00
field_writer_map.go helper/schema: Clear existing map/set/list contents before overwriting 2017-11-05 12:04:23 -08:00
field_writer_map_test.go helper/schema: Clear existing map/set/list contents before overwriting 2017-11-05 12:04:23 -08:00
getsource_string.go Update various files for new version of "stringer" 2017-12-11 13:26:29 -08:00
provider.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
provider_test.go helper/schema: Add test for invalid timeout value 2018-11-05 12:42:12 +00:00
provisioner.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
provisioner_test.go Refactor the provisioner validation function (#15273) 2017-06-15 19:57:04 +02:00
resource.go move InstanceState shim into schema.Resource 2018-11-16 09:59:03 -05:00
resource_data.go SetId should set the attribute as well 2018-10-16 18:50:57 -07:00
resource_data_get_source.go helper/schema: diff with set going to 0 elements removes it from state 2015-02-17 11:38:56 -08:00
resource_data_test.go SetId should set the attribute as well 2018-10-16 18:50:57 -07:00
resource_diff.go Don't allow sub-blocks for SetNew. 2018-09-26 12:38:38 -07:00
resource_diff_test.go Add tests to ensure clearing sub-blocks works. 2018-09-20 10:52:36 -07:00
resource_importer.go helper/schema: pass through import state func 2016-05-16 10:03:57 -07:00
resource_test.go helper/schema: Fix timeout parsing in ResourceTimeout.ConfigDecode 2018-11-05 12:42:12 +00:00
resource_timeout.go helper/schema: Avoid erroring out on undefined timeouts 2018-11-07 15:38:58 +00:00
resource_timeout_test.go helper/schema: Fix timeout parsing in ResourceTimeout.ConfigDecode 2018-11-05 12:42:12 +00:00
schema.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
schema_test.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
serialize.go core: Avoid crash on empty TypeSet blocks (#14305) 2017-05-09 20:45:53 +02:00
serialize_test.go Add test for TypeMap in a Schema 2016-06-09 16:00:33 -04:00
set.go Add a HashInt helper/schema function 2018-04-27 00:04:41 -07:00
set_test.go helper/schema: More tests for Set.HashEqual 2017-08-15 21:56:01 -07:00
shims.go use ShimInstanceStateFromValue in DiffFromValues 2018-11-16 09:59:03 -05:00
shims_test.go use ShimInstanceStateFromValue in DiffFromValues 2018-11-16 09:59:03 -05:00
testing.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
valuetype.go helper/schema: zero value of a set should be empty 2015-02-17 16:58:47 -08:00
valuetype_string.go Update various files for new version of "stringer" 2017-12-11 13:26:29 -08:00

README.md

Terraform Helper Lib: schema

The schema package provides a high-level interface for writing resource providers for Terraform.

If you're writing a resource provider, we recommend you use this package.

The interface exposed by this package is much friendlier than trying to write to the Terraform API directly. The core Terraform API is low-level and built for maximum flexibility and control, whereas this library is built as a framework around that to more easily write common providers.