|
|
|
|
|
# Create a resource group if it doesn’t exist |
|
resource "azurerm_resource_group" "myterraformgroup" { |
|
name = "marshyonResourceGroup" |
|
location = "${var.azure_region}" |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
} |
|
|
|
# Create virtual network |
|
resource "azurerm_virtual_network" "myterraformnetwork" { |
|
name = "myVnet" |
|
address_space = ["10.0.0.0/16"] |
|
location = "${var.azure_region}" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
} |
|
|
|
# Create subnet |
|
resource "azurerm_subnet" "myterraformsubnet" { |
|
name = "mySubnet" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
virtual_network_name = "${azurerm_virtual_network.myterraformnetwork.name}" |
|
address_prefix = "10.0.1.0/24" |
|
} |
|
|
|
# Create public IPs |
|
resource "azurerm_public_ip" "myterraformpublicip" { |
|
name = "myPublicIP" |
|
location = "${var.azure_region}" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
allocation_method = "Dynamic" |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
} |
|
|
|
# Create Network Security Group and rule |
|
resource "azurerm_network_security_group" "myterraformnsg" { |
|
name = "myNetworkSecurityGroup" |
|
location = "${var.azure_region}" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
|
|
security_rule { |
|
name = "RDP" |
|
priority = 1001 |
|
direction = "Inbound" |
|
access = "Allow" |
|
protocol = "Tcp" |
|
source_port_range = "*" |
|
destination_port_range = "3389" |
|
source_address_prefix = "*" |
|
destination_address_prefix = "*" |
|
} |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
} |
|
|
|
# Create network interface |
|
resource "azurerm_network_interface" "myterraformnic" { |
|
name = "myNIC" |
|
location = "${var.azure_region}" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
network_security_group_id = "${azurerm_network_security_group.myterraformnsg.id}" |
|
|
|
ip_configuration { |
|
name = "myNicConfiguration" |
|
subnet_id = "${azurerm_subnet.myterraformsubnet.id}" |
|
private_ip_address_allocation = "Dynamic" |
|
public_ip_address_id = "${azurerm_public_ip.myterraformpublicip.id}" |
|
} |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
} |
|
|
|
# Generate random text for a unique storage account name |
|
resource "random_id" "randomId" { |
|
keepers = { |
|
# Generate a new ID only when a new resource group is defined |
|
resource_group = "${azurerm_resource_group.myterraformgroup.name}" |
|
} |
|
|
|
byte_length = 8 |
|
} |
|
|
|
# Create storage account for boot diagnostics |
|
resource "azurerm_storage_account" "mystorageaccount" { |
|
name = "diag${random_id.randomId.hex}" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
location = "${var.azure_region}" |
|
account_tier = "Standard" |
|
account_replication_type = "LRS" |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
} |
|
|
|
# Create virtual machine |
|
resource "azurerm_virtual_machine" "myterraformvm" { |
|
name = "${var.vm_name_prefix}" |
|
location = "${var.azure_region}" |
|
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}" |
|
network_interface_ids = ["${azurerm_network_interface.myterraformnic.id}"] |
|
vm_size = "Standard_DS1_v2" |
|
|
|
storage_os_disk { |
|
name = "myOsDisk" |
|
caching = "ReadWrite" |
|
create_option = "FromImage" |
|
managed_disk_type = "Premium_LRS" |
|
} |
|
|
|
storage_image_reference { |
|
publisher = "MicrosoftWindowsServer" |
|
offer = "WindowsServer" |
|
sku = "2016-Datacenter" |
|
version = "latest" |
|
} |
|
|
|
os_profile { |
|
# computer_name = "myvm" |
|
computer_name = "${var.vm_name_prefix}" |
|
|
|
admin_username = "${var.admin_username}" |
|
admin_password = "${var.admin_password}" |
|
|
|
custom_data = "${base64encode("Param($RemoteHostName = \"${var.vm_name_prefix}.${var.azure_region}.${var.azure_dns_suffix}\", $ComputerName = \"${var.vm_name_prefix}\", $WinRmPort = ${var.vm_winrm_port_1}) ${file("Deploy.PS1")}")}" |
|
|
|
} |
|
|
|
os_profile_windows_config { |
|
provision_vm_agent = true |
|
enable_automatic_upgrades = true |
|
|
|
additional_unattend_config { |
|
pass = "oobeSystem" |
|
component = "Microsoft-Windows-Shell-Setup" |
|
setting_name = "AutoLogon" |
|
content = "<AutoLogon><Password><Value>${var.admin_password}</Value></Password><Enabled>true</Enabled><LogonCount>1</LogonCount><Username>${var.admin_username}</Username></AutoLogon>" |
|
} |
|
additional_unattend_config { |
|
pass = "oobeSystem" |
|
component = "Microsoft-Windows-Shell-Setup" |
|
setting_name = "FirstLogonCommands" |
|
content = "${file("FirstLogonCommands.xml")}" |
|
} |
|
} |
|
|
|
boot_diagnostics { |
|
enabled = "true" |
|
storage_uri = "${azurerm_storage_account.mystorageaccount.primary_blob_endpoint}" |
|
} |
|
|
|
tags = { |
|
environment = "Terraform Demo" |
|
} |
|
|
|
|
|
|
|
} |
|
|
|
data "azurerm_public_ip" "test" { |
|
name = "${azurerm_public_ip.myterraformpublicip.name}" |
|
resource_group_name = "${azurerm_virtual_machine.myterraformvm.resource_group_name}" |
|
} |
|
|
|
variable "post_install" { |
|
default = "" |
|
} |
|
|
|
|
|
output "public_ip_address" { |
|
value = "${data.azurerm_public_ip.test.ip_address}" |
|
} |