terraform/helper/schema
Martin Atkins 06acc3f6c8 helper/schema: Skip validation of unknown values
With the introduction of explicit "null" in 0.12 it's possible for a value
that is unknown during plan to become a known null during apply, so we
need to slightly weaken our validation rules to accommodate that, in
particular skipping the validation of conflicting attributes if the result
could potentially be valid after the unknown values become known.

This change is in the codepath that is common to both 0.12 and 0.11
callers, but that's safe because 0.11 re-runs validation during the apply
step and so will still catch problems here, albeit in the apply step
rather than in the plan step, thus matching the 0.12 behavior. This new
behavior is a superset of the old in the sense that everything that was
valid before is still valid.

The implementation here also causes us to skip all other validation for
an attribute whose value is unknown. Most of the downstream validation
functions handle this directly anyway, but again this doesn't add any new
failure cases, and should clean up some of the rough edges we've seen with
unknown values in 0.11 once people upgrade to 0.12-compatible providers.
Any issues we now short-circuit during planning will still be caught
during apply.

While working on this I found that the existing "Not a list" test was not
actually testing the correct behavior, so this also includes a tweak to
that to ensure that it really is checking the "should be a list" path
rather than the "cannot be set" codepath it was inadvertently testing
before.
2019-01-04 14:46:47 -08:00
..
README.md
backend.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
backend_test.go
core_schema.go helper/schema: Better mimic some undocumented behaviors in Core schema 2018-11-26 17:11:34 -08:00
core_schema_test.go helper/schema: Better mimic some undocumented behaviors in Core schema 2018-11-26 17:11:34 -08:00
data_source_resource_shim.go
equal.go
field_reader.go
field_reader_config.go
field_reader_config_test.go
field_reader_diff.go don't modify argument slices 2018-12-10 11:59:27 -05:00
field_reader_diff_test.go
field_reader_map.go don't modify argument slices 2018-12-10 11:59:27 -05:00
field_reader_map_test.go
field_reader_multi.go
field_reader_multi_test.go
field_reader_test.go
field_writer.go
field_writer_map.go helper/schema: Fix setting a set in a list 2018-12-05 10:09:54 +01:00
field_writer_map_test.go
getsource_string.go
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
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
resource_data_test.go helper/schema: Fix setting a set in a list 2018-12-05 10:09:54 +01:00
resource_diff.go
resource_diff_test.go helper/schema: Always propagate NewComputed for previously zero value primative type attributes 2018-12-04 22:48:30 -05:00
resource_importer.go
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 helper/schema: Skip validation of unknown values 2019-01-04 14:46:47 -08:00
schema_test.go helper/schema: Skip validation of unknown values 2019-01-04 14:46:47 -08:00
serialize.go
serialize_test.go
set.go
set_test.go
shims.go use ShimInstanceStateFromValue in DiffFromValues 2018-11-16 09:59:03 -05:00
shims_test.go providers: Consistently use int64 for schema versions 2018-11-30 11:22:39 -08:00
testing.go create a SimpleDiff for the new provider shims 2018-10-16 19:14:11 -07:00
valuetype.go
valuetype_string.go

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.