How would you reference the Volume IDs associated with the ebs_block_device blocks in this configuration?
How would you reference the Volume IDs associated with the ebs_block_device blocks in this configuration?
To reference the Volume IDs associated with the ebs_block_device blocks in the given AWS instance resource configuration, you should use the splat operator (*). The correct syntax is aws_instance.example.ebs_block_device.*.volume_id, which accesses the volume_id field for each EBS block device attached to the aws_instance resource named example. This will create a list of the volume_id values for each block device.
It's D. If you're using square brackets, then it should be like, ebs_block_device[*].volume_id
100% D. aws_instance.example.ebs_block_device.*.volume_id and aws_instance.example.ebs_block_device[*].volume_id are equivalent and will both refer to the volume_id field for all of the EBS block devices that are attached to the aws_instance resource with the name example. The * syntax is known as the "splat" operator and can be used to indicate that the preceding attribute should be repeated for each element in a list. It can be used with both the . and [] notation. For example, suppose you have an aws_instance resource named example that has two EBS block devices attached to it, with volume_id values of vol-12345678 and vol-87654321. You could use the * operator like this: aws_instance.example.ebs_block_device.*.volume_id # This will evaluate to ["vol-12345678", "vol-87654321"] aws_instance.example.ebs_block_device[*].volume_id # This will also evaluate to ["vol-12345678", "vol-87654321"] In both cases, the volume_id field is being accessed for each element in the ebs_block_device list, and the resulting value is a list of the volume_id values for each element.
it is D. Just check it in terraform console, only D is passed :)
answer is D.. <<<Tested >>>
D. aws_instance.example.ebs_block_device.*.volume_id To reference the Volume IDs associated with the ebs_block_device blocks in the given aws_instance resource, you can use the .* syntax to reference all elements of the list. The ebs_block_device blocks are represented as a list in the aws_instance resource, and each block has a volume_id attribute that you can reference.
The brackets do not work, asterisk only.
All of them are invalid expression Based on this https://developer.hashicorp.com/terraform/language/expressions/references The arguments of the ebs_block_device nested blocks can be accessed using a splat expression. For example, to obtain a list of all of the device_name values, use aws_instance.example.ebs_block_device[*].device_name.
Answer is D > aws_instance.example.ebs_block_device.*.volume_id tolist([ "vol-123457", "vol-43437834743348", ]) > aws_instance.example.ebs_block_device.[*].volume_id ╷ │ Error: Invalid attribute name │ │ on <console-input> line 1: │ (source code not available) │ │ An attribute name is required after a dot. ╵
one valid expierience resource "aws_instance" "example" { ami = "ami-a10b4dc2" instance_type = "t2.micro" # Connect the instance to the EBS Volumes attached # https://www.terraform.io/docs/providers/aws/r/instance.html#ebs_block_device ebs_block_device { device_name = "/dev/sda1" volume_size = 10 volume_type = "gp2" } ebs_block_device { device_name = "/dev/sdb1" volume_size = 20 volume_type = "gp2" } } output "splat" { value = ["${aws_instance.example.*.id}", "${aws_ebs_volume.example.*.id}"] }
D => Right
If remove the dot then the answer should be A. I think there has a typo.. D is not correct.
aws_instance.example.ebs_block_device[*].volume_id or aws_instance.example.ebs_block_device.*.volume_id then D is the answer
resource "aws_instance" "example" { ami = "ami-0f15e0a4c8d3ee5fe" instance_type = "t2.micro" ebs_block_device { device_name = "/dev/sda1" volume_size = "16" } ebs_block_device { device_name = "/dev/sda2" volume_size = "20" } } output "device-list" { value = aws_instance.example.ebs_block_device[*].volume_id } A as written fails. A without the period after device works │ 24: value = aws_instance.example.ebs_block_device.[*].volume_id │ An attribute name is required after a dot. B fails │ 24: value = aws_instance.example.ebs_block_device.volume_id │ Block type "ebs_block_device" is represented by a set of objects, and set elements do not have addressable keys. To find elements matching C fails (even though there is a closing bracket) │ 24: value = aws_instance.example.ebs_block_device[sda2,sda3].volume_id │ The index operator must end with a closing bracket ("]"). D works as written
A is almost right and better and more modern if there is no extra dot You can add an output and validate each of the expressions: output "ebs-volume-ids" { value = aws_instance.example.ebs_block_device["sda2"].volume_id }
C can rewrite as: [for v in ["sda2", "sda3"] : aws_instance.example.ebs_block_device[v].volume_id]
The answer is D but it's a form deprecated
I with D: > aws_instance.app_server.ebs_block_device.*.volume_id tolist([ "vol-0aa30805cf71780e4", "vol-081f89b26f2fed5ac", ])
output "splat" { value = aws_instance.test-vm.ebs_block_device.*.volume_id } Outputs: splat = tolist([ "vol-088ecdfa25d46bb49", "vol-030bfe9d14a06ecd2", ]) Selected Answer: D