{"id":20936892,"url":"https://github.com/datafold/terraform-azure-datafold","last_synced_at":"2026-03-19T18:06:51.479Z","repository":{"id":258352678,"uuid":"802441839","full_name":"datafold/terraform-azure-datafold","owner":"datafold","description":"Infra deployments for Azure","archived":false,"fork":false,"pushed_at":"2024-12-10T09:25:56.000Z","size":59,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-01-19T20:17:25.938Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datafold.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-18T09:58:19.000Z","updated_at":"2024-12-10T09:25:59.000Z","dependencies_parsed_at":"2024-10-24T15:37:44.813Z","dependency_job_id":"7662c256-92db-451e-be52-9cd1ccecc177","html_url":"https://github.com/datafold/terraform-azure-datafold","commit_stats":null,"previous_names":["datafold/terraform-azure-datafold"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datafold%2Fterraform-azure-datafold","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datafold%2Fterraform-azure-datafold/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datafold%2Fterraform-azure-datafold/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datafold%2Fterraform-azure-datafold/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datafold","download_url":"https://codeload.github.com/datafold/terraform-azure-datafold/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243330325,"owners_count":20274039,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-18T22:28:52.250Z","updated_at":"2026-02-26T03:45:02.755Z","avatar_url":"https://github.com/datafold.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"=======\n# Datafold Azure module\n\nThis repository provisions infrastructure resources on Azure for deploying Datafold using the datafold-operator.\n\n## About this module\n\n**⚠️ Important**: This module is now **optional**. If you already have AKS infrastructure in place, you can configure the required resources independently. This module is primarily intended for customers who need to set up the complete infrastructure stack for AKS deployment.\n\nThe module provisions Azure infrastructure resources that are required for Datafold deployment. Application configuration is now managed through the `datafoldapplication` custom resource on the cluster using the datafold-operator, rather than through Terraform application directories.\n\n## Breaking Changes\n\n### Application Directory Removal\n\n- The \"application\" directory is no longer part of this repository\n- Application configuration is now managed through the `datafoldapplication` custom resource on the cluster\n\n**Note**: Unlike the AWS module, the Azure module always deploys an Application Gateway as the load balancer. This is because Azure Application Gateway provides better integration with AKS and is the recommended approach for Azure deployments.\n\n## Prerequisites\n\n* An Azure subscription, preferably a new isolated one.\n* Terraform \u003e= 1.4.6\n* A customer contract with Datafold\n  * The application does not work without credentials supplied by sales\n* Access to our public helm-charts repository\n\nThe full deployment will create the following resources:\n\n* Azure Virtual Network\n* Azure subnets\n* Azure blob storage for clickhouse backups\n* Azure Application Gateway (optional, disabled by default)\n* Azure certificate (if load balancer is enabled)\n* Azure bastion\n* Azure jump VM\n* Three Azure managed disks for local data storage\n* Azure PostgreSQL database\n* An AKS cluster\n* Service accounts for the AKS cluster to perform actions outside of its cluster boundary:\n  * Provisioning existing managed disks\n  * Updating application gateway to point to specific pods in the cluster\n  * Rescaling the nodegroup between 1-2 nodes\n\n**Infrastructure Dependencies**: For a complete list of required infrastructure resources and detailed deployment guidance, see the [Datafold Dedicated Cloud Azure Deployment Documentation](https://docs.datafold.com/datafold-deployment/dedicated-cloud/azure).\n\n## Negative scope\n\n* This module will not provision DNS names in your zone.\n\n## How to use this module\n\n* See the example for a potential setup, which has dependencies on our helm-charts\n\nCreate the storage account and container for terraform state file:\n\n* Use the files in `bootstrap` to create a terraform state storage account and container.\n* Run `./run_bootstrap.sh` to create them. Enter the deployment_name when the question is asked.\n  * The `deployment_name` is important. This is used for the k8s namespace and datadog unified logging tags and other places.\n  * Suggestion: `company-datafold`\n* Transfer the name of that storage account and container into the `backend.hcl`\n* Set the `resource_group_name` and `location` where the storage account is stored.\n* `backend.hcl` is only about where the terraform state file is located.\n\nThe example directory contains a single deployment example for infrastructure setup.\n\nSetting up the infrastructure:\n\n* It is easiest if you have full admin access in the target subscription.\n* Pre-create a symmetric encryption key that is used to encrypt/decrypt secrets of this deployment.\n  * Use the alias instead of the `mrk` link. Put that into `locals.tf`\n* **Certificate Requirements**: Pre-create and validate the certificate in your DNS, then refer to that certificate in main.tf using its domain name (Replace \"datafold.acme.com\")\n* Change the settings in locals.tf\n  * provider_region = which region you want to deploy in.\n  * resource_group_name = The resource group in which to deploy.\n  * kms_profile = Can be the same profile, unless you want the encryption key elsewhere.\n  * kms_key = A pre-created symmetric KMS key. It's only purpose is for encryption/decryption of deployment secrets.\n  * deployment_name = The name of the deployment, used in kubernetes namespace, container naming and datadog \"deployment\" Unified Tag)\n  * azure_tenant_id = The tenant ID where to deploy.\n  * azure_subscription_id = The ID of the subscription to deploy in.\n* Run `terraform init -backend-config=../backend.hcl` in the infra directory.\n\n* Run `terraform apply` in `infra` directory. This should complete ok. \n  * Check in the console if you see the AKS cluster, PostgreSQL database, etc.\n  * If you enabled load balancer deployment, check for the Application Gateway as well.\n  * The configuration values needed for application deployment will be output to the console after the apply completes.\n\n**Application Deployment**: After infrastructure is ready, deploy the application using the datafold-operator. Continue with the [Datafold Helm Charts repository](https://github.com/datafold/helm-charts) to deploy the operator manager and then the application through the operator. The operator is the default and recommended method for deploying Datafold.\n\n## Infrastructure Dependencies\n\nThis module is designed to provide the complete infrastructure stack for Datafold deployment. However, if you already have AKS infrastructure in place, you can choose to configure the required resources independently.\n\n**Required Infrastructure Components**:\n- AKS cluster with appropriate node pools\n- Azure Database for PostgreSQL\n- Azure Storage account for ClickHouse backups\n- Azure managed disks for persistent storage (ClickHouse data, ClickHouse logs, Redis data)\n- Managed identities and role assignments for cluster operations\n- Azure Application Gateway (always deployed by this module)\n- Virtual Network and networking components\n- SSL certificate (must be pre-created and validated)\n\n**Alternative Approaches**:\n- **Use this module**: Provides complete infrastructure setup for new deployments\n- **Use existing infrastructure**: Configure required resources manually or through other means\n- **Hybrid approach**: Use this module for some components and existing infrastructure for others\n\nFor detailed specifications of each required component, see the [Datafold Dedicated Cloud Azure Deployment Documentation](https://docs.datafold.com/datafold-deployment/dedicated-cloud/azure). For application deployment instructions, continue with the [Datafold Helm Charts repository](https://github.com/datafold/helm-charts) to deploy the operator manager and then the application through the operator.\n\n## Resource Name Customization\n\nThe terraform-azure-datafold module provides 41 resource name override variables that allow you to customize resource names according to your organization's naming standards or compliance requirements.\n\n### Key Benefits\n- **Compliance**: Meet organizational naming conventions\n- **Environment Separation**: Different naming patterns for dev/staging/prod\n- **Multi-tenant**: Unique identifiers for different customers/teams\n- **Integration**: Match existing resource naming patterns\n\n### Quick Example\n```hcl\nmodule \"azure\" {\n  source = \"datafold/datafold/azure\"\n\n  # Standard configuration...\n  deployment_name = \"example-datafold\"\n\n  # Custom resource group name (set directly, no override needed)\n  resource_group_name   = \"prod-acme-datafold-rg\"\n  create_resource_group = false\n\n  # Custom resource names via overrides\n  aks_cluster_name_override     = \"prod-acme-datafold-aks\"\n  storage_account_name_override = \"prodacmedatafoldstorage\"\n  key_vault_name_override       = \"prod-acme-datafold-kv\"\n  virtual_network_name_override = \"prod-acme-datafold-vnet\"\n}\n```\n\n### Important Notes\n- **Azure Storage Accounts**: Max 24 chars, lowercase letters/numbers only\n- **Key Vault Names**: Max 24 chars, alphanumeric and hyphens only\n- **Service Account Scopes**: Update role assignment scopes when using overrides\n- **Storage Account Consistency**: When overriding storage account names, ensure service account scopes reference the same name to avoid permission errors\n\n📖 **For complete documentation and examples**, see [examples/README.md](./examples/README.md)\n\n### How to connect to the private AKS cluster\n\nConnecting to the AKS cluster requires 3 terminals in total.\n\n1. The first terminal is set up to access the VPC through the bastion.\n2. The second sets up a tunnel to the jumpbox.\n3. The third terminal is the one doing the work.\n\n```bash\n# Set up Kube config\ndeployment_name=\"acme-datafold\"\nproxy_port=\"1081\"\naz aks get-credentials --resource-group \"${deployment_name}-rg\" --name \"${deployment_name}-cluster\"\nkubectl config set clusters.azure-dev-datafold-cluster.proxy-url \"socks5://localhost:${proxy_port}\"\nkubectl config set-context --current --namespace=\"${deployment_name}\"\n\n # Run in terminal 1: Open an Azure Bastion tunnel into VM\ndeployment_name=\"acme-datafold\"\ntarget=\"jumpbox-vm\"\nvm_id=$(az vm list --resource-group \"${deployment_name}-rg\" | jq -r '.[].id' | grep \"${deployment_name}-${target}\")\naz network bastion tunnel --name \"bastion\" --resource-group \"${deployment_name}-rg\" --target-resource-id \"${vm_id}\" --resource-port 22 --port 50022\n\n# Run in terminal 2 (authorized_keys are passed on by cloud-init.txt file/jumpbox_custom_data):\nproxy_port=\"1081\"\nssh -i ~/.ssh/id_rsa -D $proxy_port -p 50022 adminuser@127.0.0.1 -N\n\n# Run in terminal 3:\nk9s\n```\n\n### Initializing the application\n\nAfter deploying the application through the operator (see the [Datafold Helm Charts repository](https://github.com/datafold/helm-charts)), establish a shell into the `\u003cdeployment\u003e-dfshell` container. \nIt is likely that the scheduler and server containers are crashing in a loop.\n\nAll we need to do is to run these commands:\n\n1. `./manage.py clickhouse create-tables`\n2. `./manage.py database create-or-upgrade`\n3. `./manage.py installation set-new-deployment-params`\n\nNow all containers should be up and running.\n\n## More information\n\nYou can get more information from our documentation site:\n\nhttps://docs.datafold.com/datafold-deployment/dedicated-cloud/azure\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_acme\"\u003e\u003c/a\u003e [acme](#requirement\\_acme) | ~\u003e 2.0 |\n| \u003ca name=\"requirement_azurerm\"\u003e\u003c/a\u003e [azurerm](#requirement\\_azurerm) | ~\u003e4.35.0 |\n| \u003ca name=\"requirement_tls\"\u003e\u003c/a\u003e [tls](#requirement\\_tls) | ~\u003e 3.0 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_azurerm\"\u003e\u003c/a\u003e [azurerm](#provider\\_azurerm) | ~\u003e4.35.0 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_aks\"\u003e\u003c/a\u003e [aks](#module\\_aks) | ./modules/aks | n/a |\n| \u003ca name=\"module_clickhouse_backup\"\u003e\u003c/a\u003e [clickhouse\\_backup](#module\\_clickhouse\\_backup) | ./modules/clickhouse_backup | n/a |\n| \u003ca name=\"module_data_lake\"\u003e\u003c/a\u003e [data\\_lake](#module\\_data\\_lake) | ./modules/data_lake | n/a |\n| \u003ca name=\"module_database\"\u003e\u003c/a\u003e [database](#module\\_database) | ./modules/database | n/a |\n| \u003ca name=\"module_identity\"\u003e\u003c/a\u003e [identity](#module\\_identity) | ./modules/identity | n/a |\n| \u003ca name=\"module_key_vault\"\u003e\u003c/a\u003e [key\\_vault](#module\\_key\\_vault) | ./modules/key_vault | n/a |\n| \u003ca name=\"module_load_balancer\"\u003e\u003c/a\u003e [load\\_balancer](#module\\_load\\_balancer) | ./modules/load_balancer | n/a |\n| \u003ca name=\"module_networking\"\u003e\u003c/a\u003e [networking](#module\\_networking) | ./modules/networking | n/a |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [azurerm_resource_group.default](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/resource_group) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_acme_config\"\u003e\u003c/a\u003e [acme\\_config](#input\\_acme\\_config) | The configuration for the provider of the DNS challenge | `any` | n/a | yes |\n| \u003ca name=\"input_acme_provider\"\u003e\u003c/a\u003e [acme\\_provider](#input\\_acme\\_provider) | The name of the provider for the DNS challenge | `string` | n/a | yes |\n| \u003ca name=\"input_adls_dns_link_name_override\"\u003e\u003c/a\u003e [adls\\_dns\\_link\\_name\\_override](#input\\_adls\\_dns\\_link\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_dns\\_zone\\_virtual\\_network\\_link.adls (modules/data\\_lake) | `string` | `\"\"` | no |\n| \u003ca name=\"input_adls_filesystem_name_override\"\u003e\u003c/a\u003e [adls\\_filesystem\\_name\\_override](#input\\_adls\\_filesystem\\_name\\_override) | Override for the name used in resource.azurerm\\_storage\\_data\\_lake\\_gen2\\_filesystem.adls (modules/data\\_lake) | `string` | `\"\"` | no |\n| \u003ca name=\"input_adls_private_dns_zone_name_override\"\u003e\u003c/a\u003e [adls\\_private\\_dns\\_zone\\_name\\_override](#input\\_adls\\_private\\_dns\\_zone\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_dns\\_zone.adls (modules/data\\_lake) | `string` | `\"\"` | no |\n| \u003ca name=\"input_adls_private_endpoint_name_override\"\u003e\u003c/a\u003e [adls\\_private\\_endpoint\\_name\\_override](#input\\_adls\\_private\\_endpoint\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_endpoint.adls (modules/data\\_lake) | `string` | `\"\"` | no |\n| \u003ca name=\"input_adls_storage_account_name_override\"\u003e\u003c/a\u003e [adls\\_storage\\_account\\_name\\_override](#input\\_adls\\_storage\\_account\\_name\\_override) | Override for the name used in resource.azurerm\\_storage\\_account.adls (modules/data\\_lake) | `string` | `\"\"` | no |\n| \u003ca name=\"input_aks_cluster_name_override\"\u003e\u003c/a\u003e [aks\\_cluster\\_name\\_override](#input\\_aks\\_cluster\\_name\\_override) | Override for the name used in resource.azurerm\\_kubernetes\\_cluster.default (modules/aks) | `string` | `\"\"` | no |\n| \u003ca name=\"input_aks_dns_prefix_override\"\u003e\u003c/a\u003e [aks\\_dns\\_prefix\\_override](#input\\_aks\\_dns\\_prefix\\_override) | Override for the dns\\_prefix used in resource.azurerm\\_kubernetes\\_cluster.default (modules/aks) | `string` | `\"\"` | no |\n| \u003ca name=\"input_aks_dns_service_ip\"\u003e\u003c/a\u003e [aks\\_dns\\_service\\_ip](#input\\_aks\\_dns\\_service\\_ip) | The IP address for the Kubernetes DNS service | `string` | `\"172.16.0.10\"` | no |\n| \u003ca name=\"input_aks_service_cidr\"\u003e\u003c/a\u003e [aks\\_service\\_cidr](#input\\_aks\\_service\\_cidr) | The CIDR block for the Kubernetes services | `string` | `\"172.16.0.0/16\"` | no |\n| \u003ca name=\"input_aks_sku_tier\"\u003e\u003c/a\u003e [aks\\_sku\\_tier](#input\\_aks\\_sku\\_tier) | The SKU tier for the cluster | `string` | `\"Free\"` | no |\n| \u003ca name=\"input_aks_subnet_cidrs\"\u003e\u003c/a\u003e [aks\\_subnet\\_cidrs](#input\\_aks\\_subnet\\_cidrs) | The CIDR block for the AKS subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_aks_subnet_name_override\"\u003e\u003c/a\u003e [aks\\_subnet\\_name\\_override](#input\\_aks\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.aks\\_subnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_aks_subnet_size\"\u003e\u003c/a\u003e [aks\\_subnet\\_size](#input\\_aks\\_subnet\\_size) | The size of the AKS subnet in number of IPs | `number` | `1024` | no |\n| \u003ca name=\"input_aks_workload_identity_enabled\"\u003e\u003c/a\u003e [aks\\_workload\\_identity\\_enabled](#input\\_aks\\_workload\\_identity\\_enabled) | Flag to enable workload identity | `bool` | `true` | no |\n| \u003ca name=\"input_app_gw_subnet_cidrs\"\u003e\u003c/a\u003e [app\\_gw\\_subnet\\_cidrs](#input\\_app\\_gw\\_subnet\\_cidrs) | The CIDR block for the app gateway subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_app_gw_subnet_name_override\"\u003e\u003c/a\u003e [app\\_gw\\_subnet\\_name\\_override](#input\\_app\\_gw\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.app\\_gw\\_subnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_app_gw_subnet_size\"\u003e\u003c/a\u003e [app\\_gw\\_subnet\\_size](#input\\_app\\_gw\\_subnet\\_size) | The size of the app gateway subnet in number of IPs | `number` | `256` | no |\n| \u003ca name=\"input_app_subnet_cidrs\"\u003e\u003c/a\u003e [app\\_subnet\\_cidrs](#input\\_app\\_subnet\\_cidrs) | The CIDR block for the app subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_app_subnet_name_override\"\u003e\u003c/a\u003e [app\\_subnet\\_name\\_override](#input\\_app\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.app\\_subnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_app_subnet_size\"\u003e\u003c/a\u003e [app\\_subnet\\_size](#input\\_app\\_subnet\\_size) | The size of the app subnet in number of IPs | `number` | `256` | no |\n| \u003ca name=\"input_application_gateway_name_override\"\u003e\u003c/a\u003e [application\\_gateway\\_name\\_override](#input\\_application\\_gateway\\_name\\_override) | Override for the name used in resource.azurerm\\_application\\_gateway.default (modules/load\\_balancer) | `string` | `\"\"` | no |\n| \u003ca name=\"input_azure_bastion_subnet_cidrs\"\u003e\u003c/a\u003e [azure\\_bastion\\_subnet\\_cidrs](#input\\_azure\\_bastion\\_subnet\\_cidrs) | The CIDR block for the Azure Bastion subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_azure_bastion_subnet_name_override\"\u003e\u003c/a\u003e [azure\\_bastion\\_subnet\\_name\\_override](#input\\_azure\\_bastion\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.azure\\_bastion\\_subnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_azure_bastion_subnet_size\"\u003e\u003c/a\u003e [azure\\_bastion\\_subnet\\_size](#input\\_azure\\_bastion\\_subnet\\_size) | The size of the Azure Bastion subnet in number of IPs | `number` | `256` | no |\n| \u003ca name=\"input_backup_lifecycle_expiration_days\"\u003e\u003c/a\u003e [backup\\_lifecycle\\_expiration\\_days](#input\\_backup\\_lifecycle\\_expiration\\_days) | Number of days after which clickhouse backup objects will expire and be deleted. | `number` | `6` | no |\n| \u003ca name=\"input_bastion_host_name_override\"\u003e\u003c/a\u003e [bastion\\_host\\_name\\_override](#input\\_bastion\\_host\\_name\\_override) | Override for the name used in resource.azurerm\\_bastion\\_host.bastion (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_bastion_public_ip_name_override\"\u003e\u003c/a\u003e [bastion\\_public\\_ip\\_name\\_override](#input\\_bastion\\_public\\_ip\\_name\\_override) | Override for the name used in resource.azurerm\\_public\\_ip.ip\\_bastion\\_host (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_ch_data_disk_iops\"\u003e\u003c/a\u003e [ch\\_data\\_disk\\_iops](#input\\_ch\\_data\\_disk\\_iops) | IOPS of volume | `number` | `3000` | no |\n| \u003ca name=\"input_ch_data_disk_throughput\"\u003e\u003c/a\u003e [ch\\_data\\_disk\\_throughput](#input\\_ch\\_data\\_disk\\_throughput) | Throughput of volume | `number` | `1000` | no |\n| \u003ca name=\"input_ch_logs_disk_iops\"\u003e\u003c/a\u003e [ch\\_logs\\_disk\\_iops](#input\\_ch\\_logs\\_disk\\_iops) | IOPS of volume | `number` | `3000` | no |\n| \u003ca name=\"input_ch_logs_disk_throughput\"\u003e\u003c/a\u003e [ch\\_logs\\_disk\\_throughput](#input\\_ch\\_logs\\_disk\\_throughput) | Throughput of volume | `number` | `250` | no |\n| \u003ca name=\"input_clickhouse_backup_container_name_override\"\u003e\u003c/a\u003e [clickhouse\\_backup\\_container\\_name\\_override](#input\\_clickhouse\\_backup\\_container\\_name\\_override) | Override for the name used in resource.azurerm\\_storage\\_container.clickhouse\\_backup (modules/clickhouse\\_backup) | `string` | `\"\"` | no |\n| \u003ca name=\"input_clickhouse_data_disk_name_override\"\u003e\u003c/a\u003e [clickhouse\\_data\\_disk\\_name\\_override](#input\\_clickhouse\\_data\\_disk\\_name\\_override) | Override for the name used in resource.azurerm\\_managed\\_disk.clickhouse\\_data | `string` | `\"\"` | no |\n| \u003ca name=\"input_clickhouse_data_size\"\u003e\u003c/a\u003e [clickhouse\\_data\\_size](#input\\_clickhouse\\_data\\_size) | ClickHouse data disk size in GB | `number` | `40` | no |\n| \u003ca name=\"input_clickhouse_logs_disk_name_override\"\u003e\u003c/a\u003e [clickhouse\\_logs\\_disk\\_name\\_override](#input\\_clickhouse\\_logs\\_disk\\_name\\_override) | Override for the name used in resource.azurerm\\_managed\\_disk.clickhouse\\_logs | `string` | `\"\"` | no |\n| \u003ca name=\"input_clickhouse_logs_size\"\u003e\u003c/a\u003e [clickhouse\\_logs\\_size](#input\\_clickhouse\\_logs\\_size) | ClickHouse logs disk size in GB | `number` | `40` | no |\n| \u003ca name=\"input_create_adls\"\u003e\u003c/a\u003e [create\\_adls](#input\\_create\\_adls) | Whether to create Azure Data Lake Storage | `bool` | `false` | no |\n| \u003ca name=\"input_create_database\"\u003e\u003c/a\u003e [create\\_database](#input\\_create\\_database) | Flag to toggle PostgreSQL database creation | `bool` | `true` | no |\n| \u003ca name=\"input_create_resource_group\"\u003e\u003c/a\u003e [create\\_resource\\_group](#input\\_create\\_resource\\_group) | Flag to toggle resource group creation | `bool` | `true` | no |\n| \u003ca name=\"input_custom_node_pools\"\u003e\u003c/a\u003e [custom\\_node\\_pools](#input\\_custom\\_node\\_pools) | Dynamic extra node pools | \u003cpre\u003elist(object({\u003cbr\u003e    name = string\u003cbr\u003e    enabled = bool\u003cbr\u003e    initial_node_count = number\u003cbr\u003e    vm_size = string\u003cbr\u003e    disk_size_gb = number\u003cbr\u003e    disk_type = string\u003cbr\u003e    taints = list(object({\u003cbr\u003e      key    = string\u003cbr\u003e      value  = string\u003cbr\u003e      effect = string\u003cbr\u003e    }))\u003cbr\u003e    spot            = bool\u003cbr\u003e    min_node_count  = number\u003cbr\u003e    max_node_count  = number\u003cbr\u003e    max_surge       = number\u003cbr\u003e    labels          = map(string)\u003cbr\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_database_backup_retention_days\"\u003e\u003c/a\u003e [database\\_backup\\_retention\\_days](#input\\_database\\_backup\\_retention\\_days) | PostgreSQL backup retention days | `number` | `7` | no |\n| \u003ca name=\"input_database_dns_link_name_override\"\u003e\u003c/a\u003e [database\\_dns\\_link\\_name\\_override](#input\\_database\\_dns\\_link\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_dns\\_zone\\_virtual\\_network\\_link.database (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_database_name\"\u003e\u003c/a\u003e [database\\_name](#input\\_database\\_name) | Postgres database name | `string` | `\"datafold\"` | no |\n| \u003ca name=\"input_database_private_dns_zone_name_override\"\u003e\u003c/a\u003e [database\\_private\\_dns\\_zone\\_name\\_override](#input\\_database\\_private\\_dns\\_zone\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_dns\\_zone.database (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_database_sku\"\u003e\u003c/a\u003e [database\\_sku](#input\\_database\\_sku) | PostgreSQL SKU | `string` | `\"GP_Standard_D2s_v3\"` | no |\n| \u003ca name=\"input_database_storage_mb\"\u003e\u003c/a\u003e [database\\_storage\\_mb](#input\\_database\\_storage\\_mb) | PostgreSQL storage in MB. One of a predetermined set of values, see: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/postgresql_flexible_server#storage_mb | `number` | `32768` | no |\n| \u003ca name=\"input_database_subnet_cidrs\"\u003e\u003c/a\u003e [database\\_subnet\\_cidrs](#input\\_database\\_subnet\\_cidrs) | The CIDR block for the database subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_database_subnet_name_override\"\u003e\u003c/a\u003e [database\\_subnet\\_name\\_override](#input\\_database\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.database\\_subnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_database_subnet_size\"\u003e\u003c/a\u003e [database\\_subnet\\_size](#input\\_database\\_subnet\\_size) | The size of the database subnet in number of IPs | `number` | `256` | no |\n| \u003ca name=\"input_database_username\"\u003e\u003c/a\u003e [database\\_username](#input\\_database\\_username) | ProgreSQL username | `string` | `\"datafold\"` | no |\n| \u003ca name=\"input_deploy_lb\"\u003e\u003c/a\u003e [deploy\\_lb](#input\\_deploy\\_lb) | Flag to toggle load balancer creation. When false, load balancer should be deployed via helm-charts/kubernetes. | `bool` | `true` | no |\n| \u003ca name=\"input_deployment_name\"\u003e\u003c/a\u003e [deployment\\_name](#input\\_deployment\\_name) | The name of the deployment | `string` | n/a | yes |\n| \u003ca name=\"input_disk_sku\"\u003e\u003c/a\u003e [disk\\_sku](#input\\_disk\\_sku) | Disk SKU type | `string` | `\"StandardSSD_LRS\"` | no |\n| \u003ca name=\"input_domain_name\"\u003e\u003c/a\u003e [domain\\_name](#input\\_domain\\_name) | The domain name for the load balancer. E.g. azure-dev.datafold.io | `string` | n/a | yes |\n| \u003ca name=\"input_environment\"\u003e\u003c/a\u003e [environment](#input\\_environment) | The environment for the resources | `string` | `\"dev\"` | no |\n| \u003ca name=\"input_etcd_key_name_override\"\u003e\u003c/a\u003e [etcd\\_key\\_name\\_override](#input\\_etcd\\_key\\_name\\_override) | Override for the name used in resource.azurerm\\_key\\_vault\\_key.etcd (modules/key\\_vault) | `string` | `\"\"` | no |\n| \u003ca name=\"input_gw_private_ip_address\"\u003e\u003c/a\u003e [gw\\_private\\_ip\\_address](#input\\_gw\\_private\\_ip\\_address) | The private IP address of the gateway. Should be within the gateway subnet CIDR range. | `string` | `\"10.0.9.10\"` | no |\n| \u003ca name=\"input_identity_name_override\"\u003e\u003c/a\u003e [identity\\_name\\_override](#input\\_identity\\_name\\_override) | Override for the name used in resource.azurerm\\_user\\_assigned\\_identity.default (modules/identity) | `string` | `\"\"` | no |\n| \u003ca name=\"input_jumpbox_custom_data\"\u003e\u003c/a\u003e [jumpbox\\_custom\\_data](#input\\_jumpbox\\_custom\\_data) | Custom data for the jumpbox. Can be used to e.g. pass on ~/.ssh/authorized\\_keys with a cloud-init script. | `string` | `\"\"` | no |\n| \u003ca name=\"input_jumpbox_nsg_name_override\"\u003e\u003c/a\u003e [jumpbox\\_nsg\\_name\\_override](#input\\_jumpbox\\_nsg\\_name\\_override) | Override for the name used in resource.azurerm\\_network\\_security\\_group.jumpbox (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_jumpbox_public_ip_name_override\"\u003e\u003c/a\u003e [jumpbox\\_public\\_ip\\_name\\_override](#input\\_jumpbox\\_public\\_ip\\_name\\_override) | Override for the name used in resource.azurerm\\_public\\_ip.jumpbox (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_k8s_public_access_cidrs\"\u003e\u003c/a\u003e [k8s\\_public\\_access\\_cidrs](#input\\_k8s\\_public\\_access\\_cidrs) | List of CIDRs that are allowed to connect to the EKS control plane | `list(string)` | n/a | yes |\n| \u003ca name=\"input_key_vault_name_override\"\u003e\u003c/a\u003e [key\\_vault\\_name\\_override](#input\\_key\\_vault\\_name\\_override) | Override for the name used in resource.azurerm\\_key\\_vault.default (modules/key\\_vault) | `string` | `\"\"` | no |\n| \u003ca name=\"input_lb_is_public\"\u003e\u003c/a\u003e [lb\\_is\\_public](#input\\_lb\\_is\\_public) | Flag that determines if LB is public | `bool` | `true` | no |\n| \u003ca name=\"input_linux_vm_name_override\"\u003e\u003c/a\u003e [linux\\_vm\\_name\\_override](#input\\_linux\\_vm\\_name\\_override) | Override for the name used in resource.azurerm\\_linux\\_virtual\\_machine.linux\\_vm (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_location\"\u003e\u003c/a\u003e [location](#input\\_location) | The Azure location where the resources will be created | `string` | `\"\"` | no |\n| \u003ca name=\"input_max_node_count\"\u003e\u003c/a\u003e [max\\_node\\_count](#input\\_max\\_node\\_count) | n/a | `number` | `6` | no |\n| \u003ca name=\"input_max_pods\"\u003e\u003c/a\u003e [max\\_pods](#input\\_max\\_pods) | The maximum number of pods that can run on a node | `number` | `50` | no |\n| \u003ca name=\"input_min_node_count\"\u003e\u003c/a\u003e [min\\_node\\_count](#input\\_min\\_node\\_count) | n/a | `number` | `1` | no |\n| \u003ca name=\"input_node_pool_name\"\u003e\u003c/a\u003e [node\\_pool\\_name](#input\\_node\\_pool\\_name) | The name of the node pool | `string` | `\"default\"` | no |\n| \u003ca name=\"input_node_pool_node_count\"\u003e\u003c/a\u003e [node\\_pool\\_node\\_count](#input\\_node\\_pool\\_node\\_count) | The number of nodes in the pool | `number` | `1` | no |\n| \u003ca name=\"input_node_pool_vm_size\"\u003e\u003c/a\u003e [node\\_pool\\_vm\\_size](#input\\_node\\_pool\\_vm\\_size) | The size of the VMs in the pool | `string` | `\"Standard_DS2_v2\"` | no |\n| \u003ca name=\"input_postgresql_database_name_override\"\u003e\u003c/a\u003e [postgresql\\_database\\_name\\_override](#input\\_postgresql\\_database\\_name\\_override) | Override for the name used in resource.azurerm\\_postgresql\\_flexible\\_server\\_database.main (modules/database) | `string` | `\"\"` | no |\n| \u003ca name=\"input_postgresql_major_version\"\u003e\u003c/a\u003e [postgresql\\_major\\_version](#input\\_postgresql\\_major\\_version) | PostgreSQL major version | `string` | `\"15\"` | no |\n| \u003ca name=\"input_postgresql_server_name_override\"\u003e\u003c/a\u003e [postgresql\\_server\\_name\\_override](#input\\_postgresql\\_server\\_name\\_override) | Override for the name used in resource.azurerm\\_postgresql\\_flexible\\_server.main (modules/database) | `string` | `\"\"` | no |\n| \u003ca name=\"input_private_cluster_enabled\"\u003e\u003c/a\u003e [private\\_cluster\\_enabled](#input\\_private\\_cluster\\_enabled) | Flag to enable private cluster | `bool` | `true` | no |\n| \u003ca name=\"input_private_endpoint_adls_subnet_cidrs\"\u003e\u003c/a\u003e [private\\_endpoint\\_adls\\_subnet\\_cidrs](#input\\_private\\_endpoint\\_adls\\_subnet\\_cidrs) | List of subnet CIDRs for ADLS private endpoints | `list(string)` | `[]` | no |\n| \u003ca name=\"input_private_endpoint_adls_subnet_name_override\"\u003e\u003c/a\u003e [private\\_endpoint\\_adls\\_subnet\\_name\\_override](#input\\_private\\_endpoint\\_adls\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.private\\_endpoint\\_adls (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_private_endpoint_adls_subnet_size\"\u003e\u003c/a\u003e [private\\_endpoint\\_adls\\_subnet\\_size](#input\\_private\\_endpoint\\_adls\\_subnet\\_size) | Size of the ADLS subnet (number of IP addresses) | `number` | `256` | no |\n| \u003ca name=\"input_private_endpoint_storage_subnet_cidrs\"\u003e\u003c/a\u003e [private\\_endpoint\\_storage\\_subnet\\_cidrs](#input\\_private\\_endpoint\\_storage\\_subnet\\_cidrs) | The CIDR block for the private endpoint storage subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_private_endpoint_storage_subnet_name_override\"\u003e\u003c/a\u003e [private\\_endpoint\\_storage\\_subnet\\_name\\_override](#input\\_private\\_endpoint\\_storage\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.private\\_endpoint\\_storage (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_private_endpoint_storage_subnet_size\"\u003e\u003c/a\u003e [private\\_endpoint\\_storage\\_subnet\\_size](#input\\_private\\_endpoint\\_storage\\_subnet\\_size) | The size of the private endpoint storage subnet in number of IPs | `number` | `256` | no |\n| \u003ca name=\"input_public_ip_name_override\"\u003e\u003c/a\u003e [public\\_ip\\_name\\_override](#input\\_public\\_ip\\_name\\_override) | Override for the name used in resource.azurerm\\_public\\_ip.default (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_redis_data_disk_name_override\"\u003e\u003c/a\u003e [redis\\_data\\_disk\\_name\\_override](#input\\_redis\\_data\\_disk\\_name\\_override) | Override for the name used in resource.azurerm\\_managed\\_disk.redis\\_data | `string` | `\"\"` | no |\n| \u003ca name=\"input_redis_data_size\"\u003e\u003c/a\u003e [redis\\_data\\_size](#input\\_redis\\_data\\_size) | Redis data disk size in GB | `number` | `50` | no |\n| \u003ca name=\"input_redis_disk_iops\"\u003e\u003c/a\u003e [redis\\_disk\\_iops](#input\\_redis\\_disk\\_iops) | IOPS of redis volume | `number` | `3000` | no |\n| \u003ca name=\"input_redis_disk_throughput\"\u003e\u003c/a\u003e [redis\\_disk\\_throughput](#input\\_redis\\_disk\\_throughput) | Throughput of redis volume | `number` | `125` | no |\n| \u003ca name=\"input_resource_group_name\"\u003e\u003c/a\u003e [resource\\_group\\_name](#input\\_resource\\_group\\_name) | The name of the resource group where the resources will be created | `string` | `\"\"` | no |\n| \u003ca name=\"input_resource_group_tags\"\u003e\u003c/a\u003e [resource\\_group\\_tags](#input\\_resource\\_group\\_tags) | The tags to apply to the resource group | `map(string)` | `{}` | no |\n| \u003ca name=\"input_service_accounts\"\u003e\u003c/a\u003e [service\\_accounts](#input\\_service\\_accounts) | Map of service accounts and their configuration | \u003cpre\u003emap(object({\u003cbr\u003e    namespace             = string\u003cbr\u003e    create_azure_identity = bool\u003cbr\u003e    identity_name         = optional(string)\u003cbr\u003e    role_assignments      = optional(list(object({\u003cbr\u003e      role  = string\u003cbr\u003e      scope = string\u003cbr\u003e    })), [])\u003cbr\u003e  }))\u003c/pre\u003e | `{}` | no |\n| \u003ca name=\"input_ssl_cert_name\"\u003e\u003c/a\u003e [ssl\\_cert\\_name](#input\\_ssl\\_cert\\_name) | The name of the SSL certificate to use for the load balancer. This needs to be referenced by the k8s azure-application-gateway ingress config. | `string` | n/a | yes |\n| \u003ca name=\"input_ssl_certificate_name_override\"\u003e\u003c/a\u003e [ssl\\_certificate\\_name\\_override](#input\\_ssl\\_certificate\\_name\\_override) | Override for the name used in resource.azurerm\\_key\\_vault\\_certificate.ssl (modules/key\\_vault) | `string` | `\"\"` | no |\n| \u003ca name=\"input_storage_account_name_override\"\u003e\u003c/a\u003e [storage\\_account\\_name\\_override](#input\\_storage\\_account\\_name\\_override) | Override for the name used in resource.azurerm\\_storage\\_account.storage (modules/clickhouse\\_backup) | `string` | `\"\"` | no |\n| \u003ca name=\"input_storage_dns_link_name_override\"\u003e\u003c/a\u003e [storage\\_dns\\_link\\_name\\_override](#input\\_storage\\_dns\\_link\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_dns\\_zone\\_virtual\\_network\\_link.storage\\_account\\_link (modules/clickhouse\\_backup) | `string` | `\"\"` | no |\n| \u003ca name=\"input_storage_private_dns_zone_name_override\"\u003e\u003c/a\u003e [storage\\_private\\_dns\\_zone\\_name\\_override](#input\\_storage\\_private\\_dns\\_zone\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_dns\\_zone.storage\\_account\\_dns (modules/clickhouse\\_backup) | `string` | `\"\"` | no |\n| \u003ca name=\"input_storage_private_endpoint_name_override\"\u003e\u003c/a\u003e [storage\\_private\\_endpoint\\_name\\_override](#input\\_storage\\_private\\_endpoint\\_name\\_override) | Override for the name used in resource.azurerm\\_private\\_endpoint.storage (modules/clickhouse\\_backup) | `string` | `\"\"` | no |\n| \u003ca name=\"input_virtual_network_name_override\"\u003e\u003c/a\u003e [virtual\\_network\\_name\\_override](#input\\_virtual\\_network\\_name\\_override) | Override for the name used in resource.azurerm\\_virtual\\_network.vnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_virtual_network_tags\"\u003e\u003c/a\u003e [virtual\\_network\\_tags](#input\\_virtual\\_network\\_tags) | The tags to apply to the virtual network | `map(string)` | `{}` | no |\n| \u003ca name=\"input_vm_bastion_subnet_cidrs\"\u003e\u003c/a\u003e [vm\\_bastion\\_subnet\\_cidrs](#input\\_vm\\_bastion\\_subnet\\_cidrs) | The CIDR block for the VM Bastion subnet. If empty it will be calculated from the VPC CIDR and given size. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_vm_bastion_subnet_name_override\"\u003e\u003c/a\u003e [vm\\_bastion\\_subnet\\_name\\_override](#input\\_vm\\_bastion\\_subnet\\_name\\_override) | Override for the name used in resource.azurerm\\_subnet.vm\\_bastion\\_subnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_vm_bastion_subnet_size\"\u003e\u003c/a\u003e [vm\\_bastion\\_subnet\\_size](#input\\_vm\\_bastion\\_subnet\\_size) | The size of the VM Bastion subnet in number of IPs | `number` | `256` | no |\n| \u003ca name=\"input_vm_nic_name_override\"\u003e\u003c/a\u003e [vm\\_nic\\_name\\_override](#input\\_vm\\_nic\\_name\\_override) | Override for the name used in resource.azurerm\\_network\\_interface.vm\\_nic (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_vnet_nsg_name_override\"\u003e\u003c/a\u003e [vnet\\_nsg\\_name\\_override](#input\\_vnet\\_nsg\\_name\\_override) | Override for the name used in resource.azurerm\\_network\\_security\\_group.nsg\\_vnet (modules/networking) | `string` | `\"\"` | no |\n| \u003ca name=\"input_vpc_cidrs\"\u003e\u003c/a\u003e [vpc\\_cidrs](#input\\_vpc\\_cidrs) | The address space for the virtual network | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"10.0.0.0/16\"\u003cbr\u003e]\u003c/pre\u003e | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_adls_account_key\"\u003e\u003c/a\u003e [adls\\_account\\_key](#output\\_adls\\_account\\_key) | The access key for the Azure Data Lake Storage account |\n| \u003ca name=\"output_adls_account_name\"\u003e\u003c/a\u003e [adls\\_account\\_name](#output\\_adls\\_account\\_name) | The name of the Azure Data Lake Storage account |\n| \u003ca name=\"output_adls_filesystem\"\u003e\u003c/a\u003e [adls\\_filesystem](#output\\_adls\\_filesystem) | The filesystem details for the Azure Data Lake Storage |\n| \u003ca name=\"output_azure_blob_account_key\"\u003e\u003c/a\u003e [azure\\_blob\\_account\\_key](#output\\_azure\\_blob\\_account\\_key) | The access key for the Azure Blob Storage account |\n| \u003ca name=\"output_azure_blob_account_name\"\u003e\u003c/a\u003e [azure\\_blob\\_account\\_name](#output\\_azure\\_blob\\_account\\_name) | The name of the Azure Blob Storage account |\n| \u003ca name=\"output_azure_blob_container\"\u003e\u003c/a\u003e [azure\\_blob\\_container](#output\\_azure\\_blob\\_container) | The name of the Azure Blob Storage container |\n| \u003ca name=\"output_clickhouse_data_volume_id\"\u003e\u003c/a\u003e [clickhouse\\_data\\_volume\\_id](#output\\_clickhouse\\_data\\_volume\\_id) | The volume ID where clickhouse data will be stored. |\n| \u003ca name=\"output_clickhouse_logs_volume_id\"\u003e\u003c/a\u003e [clickhouse\\_logs\\_volume\\_id](#output\\_clickhouse\\_logs\\_volume\\_id) | The volume ID where clickhouse logs will be stored. |\n| \u003ca name=\"output_cloud_provider\"\u003e\u003c/a\u003e [cloud\\_provider](#output\\_cloud\\_provider) | The cloud provider being used (always 'azure' for this module) |\n| \u003ca name=\"output_cluster_name\"\u003e\u003c/a\u003e [cluster\\_name](#output\\_cluster\\_name) | The name of the AKS cluster |\n| \u003ca name=\"output_domain_name\"\u003e\u003c/a\u003e [domain\\_name](#output\\_domain\\_name) | The domain name configured for the deployment |\n| \u003ca name=\"output_load_balancer_ips\"\u003e\u003c/a\u003e [load\\_balancer\\_ips](#output\\_load\\_balancer\\_ips) | The public IP addresses assigned to the load balancer |\n| \u003ca name=\"output_postgres_database_name\"\u003e\u003c/a\u003e [postgres\\_database\\_name](#output\\_postgres\\_database\\_name) | The name of the PostgreSQL database |\n| \u003ca name=\"output_postgres_host\"\u003e\u003c/a\u003e [postgres\\_host](#output\\_postgres\\_host) | The hostname of the PostgreSQL server |\n| \u003ca name=\"output_postgres_password\"\u003e\u003c/a\u003e [postgres\\_password](#output\\_postgres\\_password) | The password for PostgreSQL database access |\n| \u003ca name=\"output_postgres_username\"\u003e\u003c/a\u003e [postgres\\_username](#output\\_postgres\\_username) | The username for PostgreSQL database access |\n| \u003ca name=\"output_public_ip_jumpbox\"\u003e\u003c/a\u003e [public\\_ip\\_jumpbox](#output\\_public\\_ip\\_jumpbox) | The private IP address of the jumpbox |\n| \u003ca name=\"output_redis_data_volume_id\"\u003e\u003c/a\u003e [redis\\_data\\_volume\\_id](#output\\_redis\\_data\\_volume\\_id) | The volume ID of the Redis data volume. |\n| \u003ca name=\"output_resource_group_name\"\u003e\u003c/a\u003e [resource\\_group\\_name](#output\\_resource\\_group\\_name) | The resource group where resources were deployed |\n| \u003ca name=\"output_service_account_configs\"\u003e\u003c/a\u003e [service\\_account\\_configs](#output\\_service\\_account\\_configs) | The Azure identity configs |\n| \u003ca name=\"output_vnet_name\"\u003e\u003c/a\u003e [vnet\\_name](#output\\_vnet\\_name) | The name of the virtual network |\n| \u003ca name=\"output_vpc_cidr\"\u003e\u003c/a\u003e [vpc\\_cidr](#output\\_vpc\\_cidr) | The CIDR block of the VPC |\n\n\u003c!-- END_TF_DOCS --\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatafold%2Fterraform-azure-datafold","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatafold%2Fterraform-azure-datafold","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatafold%2Fterraform-azure-datafold/lists"}