diff --git a/azure/anf.tf b/azure/anf.tf new file mode 100644 index 0000000..00440bb --- /dev/null +++ b/azure/anf.tf @@ -0,0 +1,51 @@ +resource "azurerm_netapp_account" "anf" { + name = "anf-${local.cluster_id}" + location = azurerm_resource_group.rg.location + resource_group_name = azurerm_resource_group.rg.name + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_netapp_pool" "anfpool" { + name = "anfpool" + account_name = azurerm_netapp_account.anf.name + location = azurerm_netapp_account.anf.location + resource_group_name = azurerm_netapp_account.anf.resource_group_name + service_level = "Standard" # local.homefs_service_level + size_in_tb = 4 # local.homefs_size_tb + lifecycle { + ignore_changes = [ + tags + ] + } +} +resource "azurerm_netapp_volume" "shared" { + name = "shared" + location = azurerm_netapp_account.anf.location + resource_group_name = azurerm_netapp_account.anf.resource_group_name + account_name = azurerm_netapp_account.anf.name + pool_name = azurerm_netapp_pool.anfpool.name + volume_path = "shared" + service_level = "Standard" + subnet_id = azurerm_subnet.netapp.id + protocols = ["NFSv3"] + security_style = "Unix" + storage_quota_in_gb = 4 * 1024 + + export_policy_rule { + rule_index = 1 + allowed_clients = [ "0.0.0.0/0" ] + unix_read_write = true + protocols_enabled = [ "NFSv3" ] + root_access_enabled = true + } + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/azure/compute.tf b/azure/compute.tf new file mode 100644 index 0000000..0bac4e1 --- /dev/null +++ b/azure/compute.tf @@ -0,0 +1,110 @@ +resource "tls_private_key" "internal" { + algorithm = "RSA" + rsa_bits = 2048 # This is the default +} + +resource "local_file" "private_key" { + content = tls_private_key.internal.private_key_pem + filename = "${path.cwd}/${local.admin_username}_id_rsa" + file_permission = "0600" +} + +resource "local_file" "public_key" { + content = tls_private_key.internal.public_key_openssh + filename = "${path.cwd}/${local.admin_username}_id_rsa.pub" + file_permission = "0644" +} + +resource "azurerm_public_ip" "mgmt-pip" { + name = "mgmt-pip" + location = azurerm_resource_group.rg.location + resource_group_name = azurerm_resource_group.rg.name + allocation_method = "Static" +} + +resource "azurerm_network_interface" "mgmt-nic" { + name = "mgmt-nic" + location = azurerm_resource_group.rg.location + resource_group_name = azurerm_resource_group.rg.name + + ip_configuration { + name = "internal" + subnet_id = azurerm_subnet.subnet.id + private_ip_address_allocation = "Dynamic" + public_ip_address_id = azurerm_public_ip.mgmt-pip.id + } +} + +locals { + custom_data = data.template_file.bootstrap-script.rendered + } + + +resource "azurerm_linux_virtual_machine" "mgmt" { + name = "mgmt" + location = azurerm_resource_group.rg.location + resource_group_name = azurerm_resource_group.rg.name + size = "Standard_D4s_v3" + admin_username = "${local.admin_username}" + network_interface_ids = [ + azurerm_network_interface.mgmt-nic.id, + ] + + admin_ssh_key { + username = "${local.admin_username}" + public_key = tls_private_key.internal.public_key_openssh #file("~/.ssh/id_rsa.pub") + } + + os_disk { + caching = "ReadWrite" + storage_account_type = "Standard_LRS" + } + + identity { + type = "SystemAssigned" + } + + source_image_reference { + publisher = "OpenLogic" + offer = "CentOS" + sku = "8_4-gen2" + version = "latest" + } + + provisioner "file" { + destination = "/tmp/startnode.yaml" + content = data.template_file.startnode-yaml.rendered + + connection { + type = "ssh" + user = "centos" + private_key = tls_private_key.internal.private_key_pem + host = azurerm_public_ip.mgmt-pip.ip_address + } + } + + provisioner "file" { + destination = "/tmp/shapes.yaml" + source = "${path.module}/files/shapes.yaml" + + connection { + type = "ssh" + user = "centos" + private_key = tls_private_key.internal.private_key_pem + host = azurerm_public_ip.mgmt-pip.ip_address + } + } + + custom_data = base64encode(local.custom_data) +} + + +resource "azurerm_role_assignment" "role_assignment" { + scope = azurerm_resource_group.rg.id + role_definition_name = "Contributor" + principal_id = "${lookup(azurerm_linux_virtual_machine.mgmt.identity[0], "principal_id")}" + + lifecycle { + ignore_changes = [name] + } +} diff --git a/azure/data-sources.tf b/azure/data-sources.tf new file mode 100644 index 0000000..fd5b438 --- /dev/null +++ b/azure/data-sources.tf @@ -0,0 +1,32 @@ +data "template_file" "bootstrap-script" { + template = file("${path.module}/../common-files/bootstrap.sh.tpl") + vars = { + ansible_repo = var.ansible_repo + ansible_branch = var.ansible_branch + cloud-platform = "azure" + fileserver-ip = element(azurerm_netapp_volume.shared.mount_ip_addresses, 0) + custom_block = templatefile("${path.module}/files/bootstrap_custom.sh.tpl", { + dns_zone = azurerm_private_dns_zone.citc.name + citc_keys = var.admin_public_keys + }) + mgmt_hostname: local.mgmt_hostname + citc_keys = var.admin_public_keys + } +} + +data "template_file" "startnode-yaml" { + template = file("${path.module}/files/startnode.yaml.tpl") + vars = { + cloud-platform = "azure" + ansible_repo = var.ansible_repo + ansible_branch = var.ansible_branch + region = var.region + resource_group = azurerm_resource_group.rg.name + subnet = azurerm_subnet.subnet.id + virtual_network = azurerm_virtual_network.vnet.name + virtual_network_subnet = azurerm_subnet.subnet.name + subscription = data.azurerm_subscription.primary.subscription_id + dns_zone = azurerm_private_dns_zone.citc.name + cluster_id: local.cluster_id + } +} diff --git a/azure/dns.tf b/azure/dns.tf new file mode 100644 index 0000000..7da8ad3 --- /dev/null +++ b/azure/dns.tf @@ -0,0 +1,20 @@ +resource "azurerm_private_dns_zone" "citc" { + name = "citc.zone" + resource_group_name = azurerm_resource_group.rg.name +} + +resource "azurerm_private_dns_a_record" "fileserver" { + name = "fileserver" + zone_name = azurerm_private_dns_zone.citc.name + resource_group_name = azurerm_resource_group.rg.name + ttl = 300 + records = azurerm_netapp_volume.shared.mount_ip_addresses +} + +resource "azurerm_private_dns_zone_virtual_network_link" "citc" { + name = "citc" + resource_group_name = azurerm_resource_group.rg.name + private_dns_zone_name = azurerm_private_dns_zone.citc.name + virtual_network_id = azurerm_virtual_network.vnet.id + registration_enabled = true +} diff --git a/azure/files/bootstrap_custom.sh.tpl b/azure/files/bootstrap_custom.sh.tpl new file mode 100644 index 0000000..b1714ba --- /dev/null +++ b/azure/files/bootstrap_custom.sh.tpl @@ -0,0 +1,15 @@ +# This allows the user to log into the centos provisioning account +# with their provided keys. This is needed to debug if, +# for example,ansible fails to run. +cat >> /home/centos/.ssh/authorized_keys <