Skip to content

azure: create the production environment for gitlab

Vincent Sellier requested to merge generated-differential-D8645-source into master

Related to T4063

Test Plan

terraform plan happy:

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
 <= read (data resources)

Terraform will perform the following actions:

  # module.gitlab-production.azurerm_resource_group.gitlab_rg will be created
  + resource "azurerm_resource_group" "gitlab_rg" {
      + id       = (known after apply)
      + location = "westeurope"
      + name     = "euwest-gitlab-production"
      + tags     = {
          + "environment" = "gitlab"
        }
    }

  # module.gitlab-production.azurerm_storage_account.gitlab_storage will be created
  + resource "azurerm_storage_account" "gitlab_storage" {
      + access_tier                       = (known after apply)
      + account_kind                      = "StorageV2"
      + account_replication_type          = "LRS"
      + account_tier                      = "Standard"
      + allow_nested_items_to_be_public   = true
      + cross_tenant_replication_enabled  = true
      + enable_https_traffic_only         = true
      + id                                = (known after apply)
      + infrastructure_encryption_enabled = false
      + is_hns_enabled                    = false
      + large_file_share_enabled          = (known after apply)
      + location                          = "westeurope"
      + min_tls_version                   = "TLS1_2"
      + name                              = "swheuwestgitlabprod"
      + nfsv3_enabled                     = false
      + primary_access_key                = (sensitive value)
      + primary_blob_connection_string    = (sensitive value)
      + primary_blob_endpoint             = (known after apply)
      + primary_blob_host                 = (known after apply)
      + primary_connection_string         = (sensitive value)
      + primary_dfs_endpoint              = (known after apply)
      + primary_dfs_host                  = (known after apply)
      + primary_file_endpoint             = (known after apply)
      + primary_file_host                 = (known after apply)
      + primary_location                  = (known after apply)
      + primary_queue_endpoint            = (known after apply)
      + primary_queue_host                = (known after apply)
      + primary_table_endpoint            = (known after apply)
      + primary_table_host                = (known after apply)
      + primary_web_endpoint              = (known after apply)
      + primary_web_host                  = (known after apply)
      + queue_encryption_key_type         = "Service"
      + resource_group_name               = "euwest-gitlab-production"
      + secondary_access_key              = (sensitive value)
      + secondary_blob_connection_string  = (sensitive value)
      + secondary_blob_endpoint           = (known after apply)
      + secondary_blob_host               = (known after apply)
      + secondary_connection_string       = (sensitive value)
      + secondary_dfs_endpoint            = (known after apply)
      + secondary_dfs_host                = (known after apply)
      + secondary_file_endpoint           = (known after apply)
      + secondary_file_host               = (known after apply)
      + secondary_location                = (known after apply)
      + secondary_queue_endpoint          = (known after apply)
      + secondary_queue_host              = (known after apply)
      + secondary_table_endpoint          = (known after apply)
      + secondary_table_host              = (known after apply)
      + secondary_web_endpoint            = (known after apply)
      + secondary_web_host                = (known after apply)
      + shared_access_key_enabled         = true
      + table_encryption_key_type         = "Service"
      + tags                              = {
          + "environment" = "gitlab"
        }

      + blob_properties {
          + change_feed_enabled      = false
          + default_service_version  = (known after apply)
          + last_access_time_enabled = false
          + versioning_enabled       = false

          + container_delete_retention_policy {
              + days = 7
            }

          + delete_retention_policy {
              + days = 7
            }
        }

      + network_rules {
          + bypass                     = (known after apply)
          + default_action             = (known after apply)
          + ip_rules                   = (known after apply)
          + virtual_network_subnet_ids = (known after apply)

          + private_link_access {
              + endpoint_resource_id = (known after apply)
              + endpoint_tenant_id   = (known after apply)
            }
        }

      + queue_properties {
          + cors_rule {
              + allowed_headers    = (known after apply)
              + allowed_methods    = (known after apply)
              + allowed_origins    = (known after apply)
              + exposed_headers    = (known after apply)
              + max_age_in_seconds = (known after apply)
            }

          + hour_metrics {
              + enabled               = (known after apply)
              + include_apis          = (known after apply)
              + retention_policy_days = (known after apply)
              + version               = (known after apply)
            }

          + logging {
              + delete                = (known after apply)
              + read                  = (known after apply)
              + retention_policy_days = (known after apply)
              + version               = (known after apply)
              + write                 = (known after apply)
            }

          + minute_metrics {
              + enabled               = (known after apply)
              + include_apis          = (known after apply)
              + retention_policy_days = (known after apply)
              + version               = (known after apply)
            }
        }

      + routing {
          + choice                      = (known after apply)
          + publish_internet_endpoints  = (known after apply)
          + publish_microsoft_endpoints = (known after apply)
        }

      + share_properties {
          + cors_rule {
              + allowed_headers    = (known after apply)
              + allowed_methods    = (known after apply)
              + allowed_origins    = (known after apply)
              + exposed_headers    = (known after apply)
              + max_age_in_seconds = (known after apply)
            }

          + retention_policy {
              + days = (known after apply)
            }

          + smb {
              + authentication_types            = (known after apply)
              + channel_encryption_type         = (known after apply)
              + kerberos_ticket_encryption_type = (known after apply)
              + versions                        = (known after apply)
            }
        }
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[0] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "artifacts"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[1] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "registry"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[2] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "external-diffs"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[3] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "lfs-objects"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[4] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "uploads"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[5] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "packages"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[6] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "dependency-proxy"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[7] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "terraform"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.azurerm_storage_container.gitlab_storage_container[8] will be created
  + resource "azurerm_storage_container" "gitlab_storage_container" {
      + container_access_type   = "private"
      + has_immutability_policy = (known after apply)
      + has_legal_hold          = (known after apply)
      + id                      = (known after apply)
      + metadata                = (known after apply)
      + name                    = "pages"
      + resource_manager_id     = (known after apply)
      + storage_account_name    = "swheuwestgitlabprod"
    }

  # module.gitlab-production.module.gitlab_aks_cluster.data.azurerm_resource_group.aks_rg will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "azurerm_resource_group" "aks_rg" {
      + id       = (known after apply)
      + location = (known after apply)
      + name     = "euwest-gitlab-production"
      + tags     = (known after apply)

      + timeouts {
          + read = (known after apply)
        }
    }

  # module.gitlab-production.module.gitlab_aks_cluster.data.azurerm_subnet.internal_subnet will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "azurerm_subnet" "internal_subnet" {
      + address_prefix                                 = (known after apply)
      + address_prefixes                               = (known after apply)
      + enforce_private_link_endpoint_network_policies = (known after apply)
      + enforce_private_link_service_network_policies  = (known after apply)
      + id                                             = (known after apply)
      + name                                           = "default"
      + network_security_group_id                      = (known after apply)
      + resource_group_name                            = "swh-resource"
      + route_table_id                                 = (known after apply)
      + service_endpoints                              = (known after apply)
      + virtual_network_name                           = "swh-vnet"

      + timeouts {
          + read = (known after apply)
        }
    }

  # module.gitlab-production.module.gitlab_aks_cluster.azurerm_kubernetes_cluster.aks_cluster will be created
  + resource "azurerm_kubernetes_cluster" "aks_cluster" {
      + dns_prefix                          = "euwest-gitlab-production"
      + fqdn                                = (known after apply)
      + http_application_routing_zone_name  = (known after apply)
      + id                                  = (known after apply)
      + kube_admin_config                   = (sensitive value)
      + kube_admin_config_raw               = (sensitive value)
      + kube_config                         = (sensitive value)
      + kube_config_raw                     = (sensitive value)
      + kubernetes_version                  = (known after apply)
      + location                            = (known after apply)
      + name                                = "euwest-gitlab-production"
      + node_resource_group                 = "euwest-gitlab-production-internal"
      + oidc_issuer_url                     = (known after apply)
      + portal_fqdn                         = (known after apply)
      + private_cluster_enabled             = true
      + private_cluster_public_fqdn_enabled = false
      + private_dns_zone_id                 = (known after apply)
      + private_fqdn                        = (known after apply)
      + public_network_access_enabled       = true
      + resource_group_name                 = "euwest-gitlab-production"
      + role_based_access_control_enabled   = true
      + run_command_enabled                 = true
      + sku_tier                            = "Free"

      + auto_scaler_profile {
          + balance_similar_node_groups      = (known after apply)
          + empty_bulk_delete_max            = (known after apply)
          + expander                         = (known after apply)
          + max_graceful_termination_sec     = (known after apply)
          + max_node_provisioning_time       = (known after apply)
          + max_unready_nodes                = (known after apply)
          + max_unready_percentage           = (known after apply)
          + new_pod_scale_up_delay           = (known after apply)
          + scale_down_delay_after_add       = (known after apply)
          + scale_down_delay_after_delete    = (known after apply)
          + scale_down_delay_after_failure   = (known after apply)
          + scale_down_unneeded              = (known after apply)
          + scale_down_unready               = (known after apply)
          + scale_down_utilization_threshold = (known after apply)
          + scan_interval                    = (known after apply)
          + skip_nodes_with_local_storage    = (known after apply)
          + skip_nodes_with_system_pods      = (known after apply)
        }

      + default_node_pool {
          + enable_auto_scaling  = true
          + kubelet_disk_type    = (known after apply)
          + max_count            = 5
          + max_pods             = (known after apply)
          + min_count            = 1
          + name                 = "default"
          + node_count           = (known after apply)
          + node_labels          = (known after apply)
          + orchestrator_version = (known after apply)
          + os_disk_size_gb      = (known after apply)
          + os_disk_type         = "Managed"
          + os_sku               = (known after apply)
          + type                 = "VirtualMachineScaleSets"
          + ultra_ssd_enabled    = false
          + vm_size              = "Standard_B2ms"
        }

      + identity {
          + principal_id = (known after apply)
          + tenant_id    = (known after apply)
          + type         = "SystemAssigned"
        }

      + kubelet_identity {
          + client_id                 = (known after apply)
          + object_id                 = (known after apply)
          + user_assigned_identity_id = (known after apply)
        }

      + network_profile {
          + dns_service_ip     = (known after apply)
          + docker_bridge_cidr = (known after apply)
          + ip_versions        = (known after apply)
          + load_balancer_sku  = "standard"
          + network_mode       = (known after apply)
          + network_plugin     = "kubenet"
          + network_policy     = "calico"
          + outbound_type      = "loadBalancer"
          + pod_cidr           = (known after apply)
          + service_cidr       = (known after apply)

          + load_balancer_profile {
              + effective_outbound_ips    = (known after apply)
              + idle_timeout_in_minutes   = (known after apply)
              + managed_outbound_ip_count = (known after apply)
              + outbound_ip_address_ids   = (known after apply)
              + outbound_ip_prefix_ids    = (known after apply)
              + outbound_ports_allocated  = (known after apply)
            }

          + nat_gateway_profile {
              + effective_outbound_ips    = (known after apply)
              + idle_timeout_in_minutes   = (known after apply)
              + managed_outbound_ip_count = (known after apply)
            }
        }

      + windows_profile {
          + admin_password = (sensitive value)
          + admin_username = (known after apply)
          + license        = (known after apply)
        }
    }

  # module.gitlab-production.module.gitlab_aks_cluster.azurerm_private_endpoint.aks_cluster_endpoint will be created
  + resource "azurerm_private_endpoint" "aks_cluster_endpoint" {
      + custom_dns_configs       = (known after apply)
      + id                       = (known after apply)
      + location                 = (known after apply)
      + name                     = "euwest-gitlab-production-endpoint"
      + network_interface        = (known after apply)
      + private_dns_zone_configs = (known after apply)
      + resource_group_name      = "euwest-gitlab-production"
      + subnet_id                = (known after apply)

      + private_service_connection {
          + is_manual_connection           = false
          + name                           = "euwest-gitlab-production-psc"
          + private_connection_resource_id = (known after apply)
          + private_ip_address             = (known after apply)
          + subresource_names              = [
              + "management",
            ]
        }
    }

  # module.gitlab-production.module.gitlab_aks_cluster.azurerm_public_ip.aks_cluster_public_ip[0] will be created
  + resource "azurerm_public_ip" "aks_cluster_public_ip" {
      + allocation_method       = "Static"
      + fqdn                    = (known after apply)
      + id                      = (known after apply)
      + idle_timeout_in_minutes = 4
      + ip_address              = (known after apply)
      + ip_version              = "IPv4"
      + location                = (known after apply)
      + name                    = "euwest-gitlab-production_ip"
      + resource_group_name     = "euwest-gitlab-production-internal"
      + sku                     = "Standard"
      + sku_tier                = "Regional"
      + zones                   = [
          + "1",
          + "2",
          + "3",
        ]
    }

Plan: 14 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + gitlab-production_aks_summary     = (known after apply)
  + gitlab-production_storage_summary = (sensitive value)

Migrated from D8645 (view on Phabricator)

Merge request reports