github.com/hashicorp/terraform-plugin-sdk@v1.17.2/terraform/testdata/apply-multi-var-comprehensive/root.tf (about) 1 variable "num" { 2 } 3 4 resource "test_thing" "source" { 5 count = var.num 6 7 key = "source.${count.index}" 8 9 # The diffFunc in the test exports "name" here too, which we can use 10 # to test values that are known during plan. 11 } 12 13 resource "test_thing" "multi_count_var" { 14 count = var.num 15 16 key = "multi_count_var.${count.index}" 17 18 # Can pluck a single item out of a multi-var 19 source_id = test_thing.source.*.id[count.index] 20 source_name = test_thing.source.*.name[count.index] 21 } 22 23 resource "test_thing" "multi_count_derived" { 24 # Can use the source to get the count 25 count = length(test_thing.source) 26 27 key = "multi_count_derived.${count.index}" 28 29 source_id = test_thing.source.*.id[count.index] 30 source_name = test_thing.source.*.name[count.index] 31 } 32 33 resource "test_thing" "whole_splat" { 34 key = "whole_splat" 35 36 # Can "splat" the ids directly into an attribute of type list. 37 source_ids = test_thing.source.*.id 38 source_names = test_thing.source.*.name 39 40 # Accessing through a function should work. 41 source_ids_from_func = split(" ", join(" ", test_thing.source.*.id)) 42 source_names_from_func = split(" ", join(" ", test_thing.source.*.name)) 43 44 # A common pattern of selecting with a default. 45 first_source_id = element(concat(test_thing.source.*.id, ["default"]), 0) 46 first_source_name = element(concat(test_thing.source.*.name, ["default"]), 0) 47 48 # Prior to v0.12 we were handling lists containing list interpolations as 49 # a special case, flattening the result, for compatibility with behavior 50 # prior to v0.10. This deprecated handling is now removed, and so these 51 # each produce a list of lists. We're still using the interpolation syntax 52 # here, rather than the splat expression directly, to properly mimic how 53 # this would've looked prior to v0.12 to be explicit about what the new 54 # behavior is for this old syntax. 55 source_ids_wrapped = ["${test_thing.source.*.id}"] 56 source_names_wrapped = ["${test_thing.source.*.name}"] 57 58 } 59 60 module "child" { 61 source = "./child" 62 63 num = var.num 64 source_ids = test_thing.source.*.id 65 source_names = test_thing.source.*.name 66 } 67 68 output "source_ids" { 69 value = test_thing.source.*.id 70 } 71 72 output "source_names" { 73 value = test_thing.source.*.name 74 }