terraform { required_version = ">= 0.12.0" } provider "aws" { region = "us-east-1" } resource "aws_vpc" "my_vpc" { cidr_block = "172.16.0.0/16" tags = { Name = "tf-0.12-for-example" } } resource "aws_subnet" "my_subnet" { vpc_id = aws_vpc.my_vpc.id cidr_block = "172.16.10.0/24" tags = { Name = "tf-0.12-for-example" } } data "aws_ami" "ubuntu_14_04" { most_recent = true filter { name = "name" values = ["ubuntu/images/hvm/ubuntu-trusty-14.04-amd64-server-*"] } owners = ["099720109477"] } resource "aws_instance" "ubuntu" { count = 3 ami = data.aws_ami.ubuntu_14_04.image_id instance_type = "t2.micro" associate_public_ip_address = ( count.index == 1 ? true : false) subnet_id = aws_subnet.my_subnet.id tags = { Name = format("terraform-0.12-for-demo-%d", count.index) } } # This uses the old splat expression output "private_addresses_old" { value = aws_instance.ubuntu.*.private_dns } # This uses the new full splat operator (*) output "private_addresses_full_splat" { value = [ aws_instance.ubuntu[*].private_dns ] } # This uses the new for expression output "private_addresses_new" { value = [ for instance in aws_instance.ubuntu: instance.private_dns ] } # This uses the new conditional expression # that can work with lists # This uses the list interpolation function output "ips_with_list_interpolation" { value = [ for instance in aws_instance.ubuntu: (instance.public_ip != "" ? list(instance.private_ip, instance.public_ip) : list(instance.private_ip)) ] } # It also works with lists in [x, y, z] form output "ips_with_list_in_brackets" { value = [ for instance in aws_instance.ubuntu: (instance.public_ip != "" ? [instance.private_ip, instance.public_ip] : [instance.private_ip]) ] }