Course outlines for learning terraform.
You can add a count
parameter to resouces, like this:
# A simplified example.
resource "azurerm_virtual_machine" "vm" {
name = "myTFVM-robert"
count = 3
location = "west europe"
vm_size = "Standard_DS1_v2"
}
In the example above, the resource is created 3 times.
If you need to refer to one of the (three) instances, you can refer to:
# First instance
azurerm_virtual_machine.vm[0]
# Second instance
azurerm_virtual_machine.vm[1]
# Third instance
azurerm_virtual_machine.vm[2]
Likely the reference also has a count
meta argument set, so you can use count.index
, like this:
# A simplified example.
resource "azurerm_virtual_machine" "vm" {
name = "myTFVM-robert"
count = 3
location = "west europe"
vm_size = "Standard_DS1_v2"
}
# A simplified counted resource example.
resource "azurerm_dns_a_record" "example" {
name = "instance-${count.index}"
count = length(azurerm_virtual_machine.vm.count)
zone_name = azurerm_dns_zone.example.name
records = ["10.0.180.17"]
}
In the example above, two tricks are used:
count = length(azurerm_virtual_machine.vm.count)
. This takes the count
from azure_virtual_machine_vm
. With this construction, you can specify count
just once, and re-use it over and over again.name = "instance-${count.index}"
. This ${count.index}
increases by 1 each loop. Be aware, counting starts at 0
.Imagine you have some resource with a count
in it:
resource "azurerm_virtual_machine" "vm" {
name = "myTFVM-robert-${count.index}"
count = 3
location = "west europe"
vm_size = "Standard_DS1_v2"
}
You would get these machines:
That resource creates id
. Image you’d like to use that id
in another resource
resource "example_does_not_exist" "example" {
name = "something"
count = length(azurerm_virtual_machine.vm.count)
vm_ids = azurerm_virtual_machine.vm[*].id
}
The above is called a splat
expression.