resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create virtual network resource "azurerm_virtual_network" "my_terraform_network" { name = "myVnet" address_space = ["10.1.0.0/16"] location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Create subnet resource "azurerm_subnet" "my_terraform_subnet" { name = "mySubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.my_terraform_network.name address_prefixes = ["10.1.0.0/24"] } # Create Public IPs resource "azurerm_public_ip" "my_terraform_public_ip" { name = "myPublicIP${format("%02d", count.index)}-test" count= 7 location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Dynamic" } # Create Network Security Group and rule resource "azurerm_network_security_group" "my_terraform_nsg" { name= "myNetworkSecurityGroup" location= azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name security_rule { name= "SSH" priority= 300 direction= "Inbound" access = "Allow" protocol= "*" source_port_range= "*" destination_port_range = "22" source_address_prefix= "*" destination_address_prefix = "*" } security_rule { name= "MYSQL" priority= 310 direction= "Inbound" access = "Allow" protocol= "*" source_port_range= "*" destination_port_range = "*" source_address_prefix= "*" destination_address_prefix = "*" } } # Create network interface resource "azurerm_network_interface" "my_terraform_nic" { count= 7 name= "NIC-${format("%02d", count.index)}-test" location= azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name ip_configuration { name= "my_nic_configuration" subnet_id = azurerm_subnet.my_terraform_subnet.id private_ip_address_allocation = "Dynamic" public_ip_address_id= azurerm_public_ip.my_terraform_public_ip.*.id[count.index] } } # Connect the security group to the network interface resource "azurerm_network_interface_security_group_association" "example" { count= 7 network_interface_id= azurerm_network_interface.my_terraform_nic.*.id[count.index] network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id } # Generate random text for a unique storage account name resource "random_id" "random_id" { keepers = { # Generate a new ID only when a new resource group is defined resource_group = azurerm_resource_group.rg.name } byte_length = 8 } # Create storage account for boot diagnostics resource "azurerm_storage_account" "my_storage_account" { name = "diag${random_id.random_id.hex}" location = azurerm_resource_group.rg.location resource_group_name= azurerm_resource_group.rg.name account_tier = "Standard" account_replication_type = "LRS" } # Create virtual machine resource "azurerm_linux_virtual_machine" "KAFKA_TEST" { name= "KAFKA_TEST${format("%02d", count.index + 1)}" count= 7 location= azurerm_resource_group.rg.location resource_group_name= azurerm_resource_group.rg.name network_interface_ids = [azurerm_network_interface.my_terraform_nic.*.id[count.index]] size= "Standard_D2ps_v5" os_disk { name = "myOsDisk${format("%02d", count.index + 1)}" caching= "ReadWrite" storage_account_type = "Premium_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-focal" sku= "20_04-lts-arm64" version= "20.04.202209200" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-focal" sku= "20_04-lts-arm64" version= "20.04.202209200" } computer_name= "myvm" admin_username= "ubuntu" disable_password_authentication = true admin_ssh_key { username= "ubuntu" public_key = file("~/.ssh/id_rsa.pub") } boot_diagnostics { storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint } } resource "local_file" "inventory" { depends_on=[azurerm_linux_virtual_machine.KAFKA_TEST] filename = "/tmp/inventory" content = <