constellation/dev-docs/miniconstellation/azure-terraform/main.tf
renovate[bot] a295ecaffb
cli: add --subscriptionID flag for iam create azure command (#3328)
* deps: update Terraform azurerm to v4
* Set Azure subscription ID when applying Terraform files
* Upgrade azurerm to v4.1.0
* Mark subscriptionID flag as not required
* deps: tidy all modules

---------

Signed-off-by: Daniel Weiße <dw@edgeless.systems>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Weiße <dw@edgeless.systems>
Co-authored-by: edgelessci <edgelessci@users.noreply.github.com>
2024-09-17 12:30:22 +02:00

152 lines
4.0 KiB
HCL

terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "4.1.0"
}
random = {
source = "hashicorp/random"
version = "3.6.2"
}
tls = {
source = "hashicorp/tls"
version = "4.0.5"
}
cloudinit = {
source = "hashicorp/cloudinit"
version = "2.3.4"
}
}
}
provider "azurerm" {
use_oidc = true
features {}
# This enables all resource providers.
# In the future, we might want to use `resource_providers_to_register` to registers just the ones we need.
resource_provider_registrations = "all"
}
provider "tls" {}
resource "random_string" "suffix" {
length = 6
special = false
}
resource "tls_private_key" "ssh_key" {
algorithm = "RSA"
rsa_bits = 2048
}
data "cloudinit_config" "cloud_init" {
base64_encode = true
part {
filename = "cloud-init.yaml"
content_type = "text/cloud-config"
content = file("${path.module}/cloud-init.yaml")
}
}
resource "azurerm_resource_group" "main" {
name = var.resource_group
location = var.location
}
resource "azurerm_virtual_network" "main" {
name = "mini-${random_string.suffix.result}"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
}
resource "azurerm_subnet" "main" {
name = "mini-${random_string.suffix.result}"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.main.name
address_prefixes = ["10.0.2.0/24"]
}
resource "azurerm_public_ip" "main" {
name = "mini-${random_string.suffix.result}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
allocation_method = "Static"
sku = "Standard"
}
resource "azurerm_network_interface" "main" {
name = "mini-${random_string.suffix.result}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
ip_configuration {
name = "main"
subnet_id = azurerm_subnet.main.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.main.id
}
}
resource "azurerm_network_security_group" "ssh" {
name = "mini-${random_string.suffix.result}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
security_rule {
name = "ssh"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
resource "azurerm_subnet_network_security_group_association" "ssh" {
subnet_id = azurerm_subnet.main.id
network_security_group_id = azurerm_network_security_group.ssh.id
}
resource "azurerm_linux_virtual_machine" "main" {
name = "mini-${random_string.suffix.result}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
# Standard_D8s_v5 provides nested virtualization support
size = var.machine_type
admin_username = "adminuser"
admin_ssh_key {
username = "adminuser"
public_key = tls_private_key.ssh_key.public_key_openssh
}
boot_diagnostics {
}
network_interface_ids = [
azurerm_network_interface.main.id,
]
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy-daily"
sku = "22_04-daily-lts"
version = "latest"
}
os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
}
user_data = data.cloudinit_config.cloud_init.rendered
}