diff --git a/quickstart/101-vm-cluster-windows/main.tf b/quickstart/101-vm-cluster-windows/main.tf new file mode 100644 index 000000000..c164d7b48 --- /dev/null +++ b/quickstart/101-vm-cluster-windows/main.tf @@ -0,0 +1,55 @@ +resource "random_pet" "rg_name" { + prefix = var.resource_group_name_prefix +} + +resource "azurerm_resource_group" "rg" { + name = random_pet.rg_name.id + location = var.resource_group_location +} + +resource "random_string" "windows_server_vm_hostname" { + length = 8 + lower = true + upper = false + special = false +} + +resource "random_pet" "windows_server_public_ip_dns" { + prefix = "dns" +} + +resource "random_password" "password" { + length = 16 + special = true + lower = true + upper = true + numeric = true +} + +# The following module is a Terraform Verified Module. +# For more information about Verified Modules, see +# https://github.com/azure/terraform-azure-modules/ +module "windows_server" { + count = 3 # Define 3 Windows Server VMs + source = "Azure/compute/azurerm" + resource_group_name = azurerm_resource_group.rg.name + vnet_subnet_id = module.network.vnet_subnets[0] + is_windows_image = true + vm_hostname = "vm-${random_string.windows_server_vm_hostname.result}-${count.index}" + delete_os_disk_on_termination = true + admin_password = random_password.password.result + vm_os_simple = "WindowsServer" + public_ip_dns = ["${random_pet.windows_server_public_ip_dns.id}-${count.index}"] +} + +# The following module is a Terraform Verified Module. +# For more information about Verified Modules, see +# https://github.com/azure/terraform-azure-modules/ +module "network" { + source = "Azure/network/azurerm" + resource_group_name = azurerm_resource_group.rg.name + version = "5.2.0" + subnet_prefixes = ["10.0.1.0/24"] + subnet_names = ["subnet1"] + use_for_each = true +} \ No newline at end of file diff --git a/quickstart/101-vm-cluster-windows/outputs.tf b/quickstart/101-vm-cluster-windows/outputs.tf new file mode 100644 index 000000000..4fafa7bd0 --- /dev/null +++ b/quickstart/101-vm-cluster-windows/outputs.tf @@ -0,0 +1,19 @@ +output "resource_group_name" { + value = azurerm_resource_group.rg.name +} + +output "windows_vm_public_names" { + value = module.windows_server[*].public_ip_dns_name +} + +output "vm_public_ip_addresses" { + value = module.windows_server[*].public_ip_address +} + +output "vm_private_ip_addresses" { + value = module.windows_server[*].network_interface_private_ip +} + +output "vm_hostnames" { + value = module.windows_server[*].vm_names +} \ No newline at end of file diff --git a/quickstart/101-vm-cluster-windows/providers.tf b/quickstart/101-vm-cluster-windows/providers.tf new file mode 100644 index 000000000..4fd5f6ba7 --- /dev/null +++ b/quickstart/101-vm-cluster-windows/providers.tf @@ -0,0 +1,16 @@ +terraform { + required_version = ">=1.0" + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "~>3.0" + } + random = { + source = "hashicorp/random" + version = "~>3.0" + } + } +} +provider "azurerm" { + features {} +} \ No newline at end of file diff --git a/quickstart/101-vm-cluster-windows/readme.md b/quickstart/101-vm-cluster-windows/readme.md new file mode 100644 index 000000000..49f3e0deb --- /dev/null +++ b/quickstart/101-vm-cluster-windows/readme.md @@ -0,0 +1,26 @@ +# Azure Windows VM cluster + +This template deploys a Windows VM cluster on Azure. + +## Terraform resource types + +- [random_pet](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet) +- [azurerm_resource_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group) +- [random_string](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) +- [random_password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) + +## Terraform modules + +- [windows_server](https://registry.terraform.io/modules/Azure/compute/azurerm) +- [network](https://registry.terraform.io/modules/Azure/network/azurerm) + +## Variables + +| Name | Description | Default | +|-|-|-| +| `resource_group_name_prefix` | Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription. | rg | +| `resource_group_location` | Location of the resource group. | eastus | + +## Example + +To see how to run this example, see [Configure an Azure VM cluster using Terraform](https://learn.microsoft.com/azure/developer/terraform/create-vm-cluster-module). diff --git a/quickstart/101-vm-cluster-windows/variables.tf b/quickstart/101-vm-cluster-windows/variables.tf new file mode 100644 index 000000000..f53693ce1 --- /dev/null +++ b/quickstart/101-vm-cluster-windows/variables.tf @@ -0,0 +1,11 @@ +variable "resource_group_location" { + type = string + default = "eastus" + description = "Location for all resources." +} + +variable "resource_group_name_prefix" { + type = string + default = "rg" + description = "Prefix of the resource group name that's combined with a random value so name is unique in your Azure subscription." +} \ No newline at end of file