devenv/tf/main.tf (109 lines of code) (raw):

variable az_sub_id{ type = string description = "The Azure Subscription ID in which resources will be created." } variable az_tenant_id{ type = string description = "The Azure Subscription ID in which resources will be created." } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "= 4.16.0" } random = { source = "hashicorp/random" version = "3.6.2" } } } provider "azurerm" { features { key_vault { purge_soft_delete_on_destroy = true } } subscription_id = var.az_sub_id tenant_id = var.az_tenant_id } // randomly choose location to be less to resource limits on our subscription (they are at the location level) resource "random_shuffle" "locations" { input = ["North Central US", "South Central US", "East US 2", "West US", "West US 2", "West US 3"] result_count = 1 } variable "location" { type = string description = "The Azure Region in which resources will be created" default = "" } locals { location = var.location == "" ? random_shuffle.locations.result[0] : var.location } resource "random_string" "random" { length = 12 upper = false special = false } resource "time_static" "provisiontime" {} variable "clustertype" { description = "The type of cluster to deploy. Can be 'private' or 'public'." type = string } data "azurerm_client_config" "current" { } data "azurerm_subscription" "current" { } provider "kubernetes" { host = azurerm_kubernetes_cluster.cluster.kube_config.0.host client_certificate = base64decode(azurerm_kubernetes_cluster.cluster.kube_config.0.client_certificate) client_key = base64decode(azurerm_kubernetes_cluster.cluster.kube_config.0.client_key) cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.cluster.kube_config.0.cluster_ca_certificate) } resource "azurerm_container_registry" "acr" { name = "approutingdev${random_string.random.result}a" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku = "Basic" } resource "azurerm_role_assignment" "acr" { principal_id = azurerm_kubernetes_cluster.cluster.kubelet_identity[0].object_id role_definition_name = "AcrPull" scope = azurerm_container_registry.acr.id skip_service_principal_aad_check = true } resource "local_file" "e2econf" { content = jsonencode({ PrivateNameserver = length(var.privatezones) > 0 ? azurerm_kubernetes_cluster.cluster.network_profile[0].dns_service_ip : "" RandomPrefix = random_string.random.result PublicNameservers = length(var.publiczones) > 0 ? {for k, v in azurerm_dns_zone.dnszone : k => v.name_servers}:{} PublicCertIDs = {for k,v in azurerm_key_vault_certificate.testcert-public : k => v.id} PublicCertVersionlessIDs = {for k,v in azurerm_key_vault_certificate.testcert-public : k => v.versionless_id} PrivateCertIDs = {for k,v in azurerm_key_vault_certificate.testcert-private : k => v.id} PrivateCertVersionlessIDs = {for k,v in azurerm_key_vault_certificate.testcert-private : k=> v.versionless_id} PrivateDnsZoneIDs = [for k,v in azurerm_private_dns_zone.dnszone: v.id] PublicDnsZoneIDs = [for k,v in azurerm_dns_zone.dnszone: v.id] }) filename = "${path.module}/../state/kustomize/e2e/e2e.json" } resource "local_file" "registryconf" { content = azurerm_container_registry.acr.login_server filename = "${path.module}/../state/registry.txt" } resource "local_file" "cluster_info" { content = jsonencode({ ClusterName = azurerm_kubernetes_cluster.cluster.name ClusterResourceGroup = azurerm_kubernetes_cluster.cluster.resource_group_name }) filename = "${path.module}/../state/cluster-info.json" } resource "local_file" "addon_deployment_auth_info"{ content = jsonencode({ ClusterClientId = data.azurerm_user_assigned_identity.clusteridentity.client_id ArmTenantId = data.azurerm_client_config.current.tenant_id ResourceGroupLocation = azurerm_resource_group.rg.location DnsZones = join(",",concat([for zone in azurerm_private_dns_zone.dnszone : zone.id], [for zone in azurerm_dns_zone.dnszone : zone.id])) ClusterUid = var.clustertype == "private" ? azurerm_kubernetes_cluster.cluster.private_fqdn : azurerm_kubernetes_cluster.cluster.fqdn # tf doesn't expose CCP ID so using cluster fqdn instead }) filename = "${path.module}/../state/deployment-auth-info.json" }