terraform/helper/schema
James Nugent dbf725bd68 core: Allow dynamic attributes in helper/schema
The helper/schema framework for building providers previously validated
in all cases that each field being set in state was in the schema.
However, in order to support remote state in a usable fashion, the need
has arisen for the top level attributes of the resource to be created
dynamically. In order to still be able to use helper/schema, this commit
adds the capability to assign additional fields.

Though I do not forsee this being used by providers other than remote
state (and that eventually may move into Terraform Core rather than
being a provider), the usage and semantics are:

To opt into dynamic attributes, add a schema attribute named
"__has_dynamic_attributes", and make it an optional string with no
default value, in order that it does not appear in diffs:

        "__has_dynamic_attributes": {
            Type: schema.TypeString
            Optional: true
        }

In the read callback, use the d.UnsafeSetFieldRaw(key, value) function
to set the dynamic attributes.

Note that other fields in the schema _are_ copied into state, and that
the names of the schema fields cannot currently be used as dynamic
attribute names, as we check to ensure a value is not already set for a
given key.
2016-06-11 13:29:05 +01:00
..
README.md helper/schema: README 2014-08-17 20:51:09 -07:00
data_source_resource_shim.go helper/schema: emit warning when using data source resource shim 2016-05-14 08:26:36 -07:00
equal.go helper/schema: use interface for equality check 2015-01-16 09:32:15 -08:00
field_reader.go helper/schema: Default hashing function for sets 2015-10-03 18:10:47 -07:00
field_reader_config.go helper/schema: Read native maps from configuration 2016-05-10 14:49:14 -04:00
field_reader_config_test.go helper/schema: Read native maps from configuration 2016-05-10 14:49:14 -04:00
field_reader_diff.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01:00
field_reader_diff_test.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01:00
field_reader_map.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01:00
field_reader_map_test.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01: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 helper/schema: too big to fail 2015-01-08 18:02:19 -08:00
field_reader_test.go removed extra parentheses 2015-10-08 15:48:04 +03:00
field_writer.go helper/schema: FieldWriter, replace Set 2015-01-10 11:44:26 -08:00
field_writer_map.go core: Allow dynamic attributes in helper/schema 2016-06-11 13:29:05 +01:00
field_writer_map_test.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01:00
getsource_string.go Reflect new comment format in stringer.go 2015-11-09 11:38:51 -05:00
provider.go helper/schema: Resource can be writable or not 2016-05-14 08:26:36 -07:00
provider_test.go core: New ResourceProvider methods for data resources 2016-05-14 08:26:36 -07:00
resource.go helper/schema: emit warning when using data source resource shim 2016-05-14 08:26:36 -07:00
resource_data.go core: Allow dynamic attributes in helper/schema 2016-06-11 13:29:05 +01: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 core: Allow dynamic attributes in helper/schema 2016-06-11 13:29:05 +01:00
resource_importer.go helper/schema: pass through import state func 2016-05-16 10:03:57 -07:00
resource_test.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01:00
schema.go core: Use .% instead of .# for maps in state 2016-06-09 10:49:42 +01:00
schema_test.go helper and terraform interpolate test update 2016-06-10 10:07:17 -05:00
serialize.go Serialization for hash panics on TypeMap 2016-06-09 13:37:58 -04:00
serialize_test.go Add test for TypeMap in a Schema 2016-06-09 16:00:33 -04:00
set.go Change Set internals and make (extreme) performance improvements 2015-11-22 14:21:28 +01:00
set_test.go Change Set internals and make (extreme) performance improvements 2015-11-22 14:21:28 +01:00
valuetype.go helper/schema: zero value of a set should be empty 2015-02-17 16:58:47 -08:00
valuetype_string.go Reflect new comment format in stringer.go 2015-11-09 11:38:51 -05: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.