terraform/internal/addrs
Martin Atkins f3a57db293 addrs: UniqueKey and UniqueKeyer
Many times now we've seen situations where we need to use addresses
as map keys, but not all of our address types are comparable and thus
we tend to end up using string representations as keys instead.

That's problematic because conversion to string uses type information
and some of the address types have string representations that are
ambiguous with one another.

UniqueKey therefore represents an opaque key that is unique for each
functionally-distinct address across all types that implement
UniqueKeyer.

For this initial commit I've implemented UniqueKeyer only for the
Referenceable family of types. These are an easy case because they
were all already comparable (intentionally) anyway. Later commits
can implement UniqueKeyer for other types that are not naturally
comparable, such as any which include a ModuleInstance.

This also includes a new type addrs.Set which wraps a map as a set
of addresses, using the unique keys to ensure that there can be only
one element for each distinct address.
2021-07-14 17:37:48 -07:00
..
count_attr.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
doc.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
for_each_attr.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
input_variable.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
instance_key.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
local_value.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
module.go addrs: AbsMoveable, ConfigMoveable, and MoveableEndpoint 2021-07-01 08:28:02 -07:00
module_call.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
module_instance.go states: new `Move` funcs for Resource, ResourceInstance, and ModuleInstances (#29068) 2021-07-13 16:10:46 -04:00
module_instance_test.go states: new `Move` funcs for Resource, ResourceInstance, and ModuleInstances (#29068) 2021-07-13 16:10:46 -04:00
module_package.go addrs: ModuleRegistryPackage for representing module registry packages 2021-06-03 08:50:34 -07:00
module_source.go addrs: ModuleRegistryPackage for representing module registry packages 2021-06-03 08:50:34 -07:00
module_source_test.go addrs: ModuleRegistryPackage for representing module registry packages 2021-06-03 08:50:34 -07:00
module_test.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
move_endpoint.go configs: For Moved blocks, use addrs.MoveEndpoint instead of addrs.Target 2021-07-01 08:28:02 -07:00
move_endpoint_test.go addrs: AbsMoveable, ConfigMoveable, and MoveableEndpoint 2021-07-01 08:28:02 -07:00
moveable.go addrs: AbsMoveable, ConfigMoveable, and MoveableEndpoint 2021-07-01 08:28:02 -07:00
output_value.go addrs: Rename AbsModuleCallOutput to ModuleCallInstanceOutput 2021-07-01 08:28:02 -07:00
output_value_test.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
parse_ref.go addrs: Rename AbsModuleCallOutput to ModuleCallInstanceOutput 2021-07-01 08:28:02 -07:00
parse_ref_test.go addrs: Rename AbsModuleCallOutput to ModuleCallInstanceOutput 2021-07-01 08:28:02 -07:00
parse_target.go addrs: AbsMoveable, ConfigMoveable, and MoveableEndpoint 2021-07-01 08:28:02 -07:00
parse_target_test.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
path_attr.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
provider.go addrs: Rename DefaultRegistryHost to DefaultProviderRegistryHost 2021-06-03 08:50:34 -07:00
provider_config.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
provider_config_test.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
provider_test.go addrs: Rename DefaultRegistryHost to DefaultProviderRegistryHost 2021-06-03 08:50:34 -07:00
referenceable.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
resource.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
resource_phase.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
resource_test.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
resourcemode_string.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
self.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
set.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
target_test.go Move addrs/ to internal/addrs/ 2021-05-17 14:09:07 -07:00
targetable.go configs: add decodeMovedBlock behind a locked gate. (#28973) 2021-06-21 10:53:16 -04:00
terraform_attr.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
unique_key.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00
unique_key_test.go addrs: UniqueKey and UniqueKeyer 2021-07-14 17:37:48 -07:00