{"id":17821889,"url":"https://github.com/cloudeteer/terraform-azurerm-launchpad","last_synced_at":"2026-04-16T11:01:08.573Z","repository":{"id":258560249,"uuid":"826282722","full_name":"cloudeteer/terraform-azurerm-launchpad","owner":"cloudeteer","description":"☁️ Cloudeteer's Terraform Launchpad module","archived":false,"fork":false,"pushed_at":"2026-04-15T12:01:03.000Z","size":1481,"stargazers_count":4,"open_issues_count":12,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-15T13:20:28.238Z","etag":null,"topics":["auto-terraform-governance","azurerm","cloudeteer","terraform","terraform-module"],"latest_commit_sha":null,"homepage":"https://www.cloudeteer.de","language":"HCL","has_issues":true,"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/cloudeteer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-09T12:05:48.000Z","updated_at":"2026-04-15T12:01:03.000Z","dependencies_parsed_at":"2024-10-19T15:12:02.991Z","dependency_job_id":"1d087d0d-4666-4168-b00d-c483b3f7a058","html_url":"https://github.com/cloudeteer/terraform-azurerm-launchpad","commit_stats":null,"previous_names":["cloudeteer/terraform-azurerm-launchpad"],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/cloudeteer/terraform-azurerm-launchpad","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudeteer%2Fterraform-azurerm-launchpad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudeteer%2Fterraform-azurerm-launchpad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudeteer%2Fterraform-azurerm-launchpad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudeteer%2Fterraform-azurerm-launchpad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudeteer","download_url":"https://codeload.github.com/cloudeteer/terraform-azurerm-launchpad/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudeteer%2Fterraform-azurerm-launchpad/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31882886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["auto-terraform-governance","azurerm","cloudeteer","terraform","terraform-module"],"created_at":"2024-10-27T17:27:29.660Z","updated_at":"2026-04-16T11:01:08.565Z","avatar_url":"https://github.com/cloudeteer.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable first-line-h1 no-inline-html --\u003e\n\n\u003e [!NOTE]\n\u003e This repository is publicly accessible as part of our open-source initiative. We welcome contributions from the community alongside our organization's primary development efforts.\n\n---\n\n# terraform-azurerm-launchpad\n\n[![Terraform Registry](https://img.shields.io/badge/Terraform%20Registry-launchpad-7B42BC?style=for-the-badge\u0026logo=terraform\u0026logoColor=A067DA)](https://registry.terraform.io/modules/cloudeteer/launchpad/azurerm)\n[![OpenTofu Registry](https://img.shields.io/badge/OpenTofu%20Registry-launchpad-4B4B77?style=for-the-badge\u0026logo=opentofu)](https://search.opentofu.org/module/cloudeteer/launchpad/azurerm)\n[![SemVer](https://img.shields.io/badge/SemVer-2.0.0-F77F00?style=for-the-badge)](https://github.com/cloudeteer/terraform-azurerm-launchpad/releases)\n\nThis module provisions all essential infrastructure components within an Azure tenant to enable secure, automated management using Terraform and GitHub. It sets up a GitHub private runner, a Terraform state storage account, and other key resources necessary for fully automated Terraform deployments. The module is designed to adhere to security best practices throughout the process.\n\n## Design\n\nThe IaC Launchpad is a collection of essential Azure resources required for managing Terraform deployments via Cloudeteer GitHub Actions. The term “Launchpad” draws an analogy to rocket science, emphasizing the foundational role it plays.\n\n[![Launchpad Design](https://raw.githubusercontent.com/cloudeteer/terraform-azurerm-launchpad/refs/heads/main/images/diagram.svg)](https://github.com/cloudeteer/terraform-azurerm-launchpad/blob/main/images/diagram.png)\n\n## Tools\n\nFor a comprehensive list of tools available on the Launchpad runner, see [TOOLS.md](TOOLS.md).\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Usage\n\nThis example demonstrates how to deploy the Launchpad in a default scenario.\n\nThe two variables, `runner_token` and `runner_github_repo`, should be set at runtime during deployment using the environment variables `TF_VAR_runner_token` and `TF_VAR_runner_github_repo`.\n\n```hcl\nvariable \"my_runner_token\" {\n  type = string\n}\nvariable \"my_runner_github_repo\" {\n  type = string\n}\n\nresource \"azurerm_resource_group\" \"example\" {\n  location = \"germanywestcentral\"\n  name     = \"rg-example-dev-gwc-01\"\n}\n\nmodule \"example\" {\n  source = \"cloudeteer/launchpad/azurerm\"\n\n  resource_group_name = azurerm_resource_group.example.name\n  location            = azurerm_resource_group.example.location\n\n  runner_token       = var.my_runner_token\n  runner_github_repo = var.my_runner_github_repo\n\n  virtual_network_address_space = [\"10.0.0.0/16\"]\n  subnet_address_prefixes       = [\"10.0.2.0/24\"]\n  management_group_names        = [\"mg-example\"]\n}\n```\n\n## Providers\n\nThe following providers are used by this module:\n\n- \u003ca name=\"provider_azurerm\"\u003e\u003c/a\u003e [azurerm](#provider\\_azurerm) (\u003e= 3.114)\n\n- \u003ca name=\"provider_random\"\u003e\u003c/a\u003e [random](#provider\\_random) (\u003e= 3.6)\n\n\n\n## Resources\n\nThe following resources are used by this module:\n\n- [azurerm_federated_identity_credential.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/federated_identity_credential) (resource)\n- [azurerm_key_vault.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault) (resource)\n- [azurerm_key_vault_secret.virtual_machine_scale_set_admin_password](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault_secret) (resource)\n- [azurerm_linux_virtual_machine_scale_set.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/linux_virtual_machine_scale_set) (resource)\n- [azurerm_management_lock.key_vault_lock](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/management_lock) (resource)\n- [azurerm_management_lock.storage_account_lock](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/management_lock) (resource)\n- [azurerm_network_security_group.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/network_security_group) (resource)\n- [azurerm_private_endpoint.key_vault](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/private_endpoint) (resource)\n- [azurerm_private_endpoint.storage_account](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/private_endpoint) (resource)\n- [azurerm_role_assignment.key_vault_admin_current_user](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) (resource)\n- [azurerm_role_assignment.management_group_owner](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) (resource)\n- [azurerm_role_assignment.resource_specific](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) (resource)\n- [azurerm_role_assignment.storage_account_blob_owner_current_user](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) (resource)\n- [azurerm_role_assignment.subscription_owner](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) (resource)\n- [azurerm_role_assignment.vmss_runner_state_blob_contributor](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) (resource)\n- [azurerm_storage_account.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account) (resource)\n- [azurerm_storage_container.runner_state](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_container) (resource)\n- [azurerm_storage_container.tfstate](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_container) (resource)\n- [azurerm_subnet.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet) (resource)\n- [azurerm_subnet_network_security_group_association.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet_network_security_group_association) (resource)\n- [azurerm_user_assigned_identity.launchpad_data](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/user_assigned_identity) (resource)\n- [azurerm_user_assigned_identity.launchpad_deploy](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/user_assigned_identity) (resource)\n- [azurerm_virtual_network.this](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/virtual_network) (resource)\n- [random_password.virtual_machine_scale_set_admin_password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) (resource)\n- [random_string.kvlaunchpadprd_suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) (resource)\n- [random_string.stlaunchpadprd_suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) (resource)\n- [azurerm_client_config.current](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/client_config) (data source)\n- [azurerm_management_group.managed_by_launchpad](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/management_group) (data source)\n- [azurerm_subscription.managed_by_launchpad](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/subscription) (data source)\n\n## Required Inputs\n\nThe following input variables are required:\n\n### \u003ca name=\"input_location\"\u003e\u003c/a\u003e [location](#input\\_location)\n\nDescription: The geographic location where the resources will be deployed. This is must be a region name supported by Azure.\n\nType: `string`\n\n### \u003ca name=\"input_resource_group_name\"\u003e\u003c/a\u003e [resource\\_group\\_name](#input\\_resource\\_group\\_name)\n\nDescription: The name of the resource group in which the virtual machine should exist. Changing this forces a new resource to be created.\n\nType: `string`\n\n### \u003ca name=\"input_runner_github_repo\"\u003e\u003c/a\u003e [runner\\_github\\_repo](#input\\_runner\\_github\\_repo)\n\nDescription: Specify the GitHub repository owner and name seperated by `/` to register the action runner. e.g. `cloudeteer/squad-customer`\n\nType: `string`\n\n### \u003ca name=\"input_runner_token\"\u003e\u003c/a\u003e [runner\\_token](#input\\_runner\\_token)\n\nDescription: GitHub Actions runner join/registration token. Changing this value will force replacement of the runner state Azure Files share.\n\nType: `string`\n\n## Optional Inputs\n\nThe following input variables are optional (have default values):\n\n### \u003ca name=\"input_automatic_os_upgrade_policy\"\u003e\u003c/a\u003e [automatic\\_os\\_upgrade\\_policy](#input\\_automatic\\_os\\_upgrade\\_policy)\n\nDescription:     This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.\n\n    Required arguments:\n\n    Argument | Description\n    -- | --\n    `disable_automatic_rollback` | Should automatic rollbacks be disabled?\n    `enable_automatic_os_upgrade` | Should OS Upgrades automatically be applied to Scale Set instances in a rolling fashion when a newer version of the OS Image becomes available?\n\nType:\n\n```hcl\nobject({\n    disable_automatic_rollback  = bool\n    enable_automatic_os_upgrade = bool\n  })\n```\n\nDefault: `null`\n\n### \u003ca name=\"input_create_key_vault\"\u003e\u003c/a\u003e [create\\_key\\_vault](#input\\_create\\_key\\_vault)\n\nDescription: Create a central Key Vault which can be used to store secrets and keys securely during workload deployments.\n\nType: `bool`\n\nDefault: `true`\n\n### \u003ca name=\"input_create_role_assignments\"\u003e\u003c/a\u003e [create\\_role\\_assignments](#input\\_create\\_role\\_assignments)\n\nDescription: Determines whether to create role assignments for the specified management groups and subscriptions.\n\nType: `bool`\n\nDefault: `true`\n\n### \u003ca name=\"input_create_subnet\"\u003e\u003c/a\u003e [create\\_subnet](#input\\_create\\_subnet)\n\nDescription: Determines whether to create a new Virtual Network and Subnet.\n- Set to `true` to create a new Virtual Network and Subnet. In this case:\n  - `subnet_id` must not be specified.\n  - Both `subnet_address_prefixes` and `virtual_network_address_space` must be provided.\n- Set to `false` to use an existing Subnet. In this case:\n  - `subnet_id` must be specified.\n  - `subnet_address_prefixes` and `virtual_network_address_space` must not be provided.\n\nType: `bool`\n\nDefault: `true`\n\n### \u003ca name=\"input_encryption_at_host_enabled\"\u003e\u003c/a\u003e [encryption\\_at\\_host\\_enabled](#input\\_encryption\\_at\\_host\\_enabled)\n\nDescription: Toggle host-based encryption for the Virtual Machine Scale Set. Set to `true` to encrypt data end-to-end between the VM and the storage service.\n\n**NOTE**: Requires the provider feature `Microsoft.Compute/EncryptionAtHost` to be enabled at the subscription level.\n\nRefer to the [Azure host-based encryption guidance](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-enable-host-based-encryption-portal?tabs=azure-powershell) for further requirements and limitations.\n\nType: `bool`\n\nDefault: `true`\n\n### \u003ca name=\"input_init\"\u003e\u003c/a\u003e [init](#input\\_init)\n\nDescription: Is used for initiating the module itself for the first time. For more information please go here https://github.com/cloudeteer/terraform-azurerm-launchpad/blob/main/INSTALL.md\n\nType: `bool`\n\nDefault: `false`\n\n### \u003ca name=\"input_init_access_azure_principal_id\"\u003e\u003c/a\u003e [init\\_access\\_azure\\_principal\\_id](#input\\_init\\_access\\_azure\\_principal\\_id)\n\nDescription: Set the Azure Principal ID which will be given access to the storage account and key vault.\n**NOTE**: This is only required when `init` is set to `true`.\n\nType: `string`\n\nDefault: `null`\n\n### \u003ca name=\"input_init_access_ip_address\"\u003e\u003c/a\u003e [init\\_access\\_ip\\_address](#input\\_init\\_access\\_ip\\_address)\n\nDescription: Set the IP Address of your current public IP in order to access the new created resources. For more information please go here https://github.com/cloudeteer/terraform-azurerm-launchpad/blob/main/INSTALL.md\n\nType: `string`\n\nDefault: `null`\n\n### \u003ca name=\"input_key_vault_deletion_lock\"\u003e\u003c/a\u003e [key\\_vault\\_deletion\\_lock](#input\\_key\\_vault\\_deletion\\_lock)\n\nDescription: Whether a deletion lock should be applied to the Key Vault to prevent accidental deletion and ensure data loss prevention.\n\nType: `bool`\n\nDefault: `true`\n\n### \u003ca name=\"input_key_vault_private_dns_zone_ids\"\u003e\u003c/a\u003e [key\\_vault\\_private\\_dns\\_zone\\_ids](#input\\_key\\_vault\\_private\\_dns\\_zone\\_ids)\n\nDescription: A list of ID´s of DNS Zones in order to add the Private Endpoint of the Keyvault into your DNS Zones.\n\nType: `list(string)`\n\nDefault: `[]`\n\n### \u003ca name=\"input_key_vault_virtual_network_subnet_ids\"\u003e\u003c/a\u003e [key\\_vault\\_virtual\\_network\\_subnet\\_ids](#input\\_key\\_vault\\_virtual\\_network\\_subnet\\_ids)\n\nDescription: A list of Subnet IDs that are allowed to access the Key Vault used by the Launchpad.\n\nType: `list(string)`\n\nDefault: `[]`\n\n### \u003ca name=\"input_location_short\"\u003e\u003c/a\u003e [location\\_short](#input\\_location\\_short)\n\nDescription: Map of location short codes to merge with the existing defaults\n\nType: `map(string)`\n\nDefault: `{}`\n\n### \u003ca name=\"input_management_group_names\"\u003e\u003c/a\u003e [management\\_group\\_names](#input\\_management\\_group\\_names)\n\nDescription: A list of management group in order the Launchpad gets Owner-permission in these management-groups.\n\nType: `list(string)`\n\nDefault: `[]`\n\n### \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name)\n\nDescription: The base name applied to all resources created by this module.\n\nType: `string`\n\nDefault: `\"launchpad\"`\n\n### \u003ca name=\"input_name_overrides\"\u003e\u003c/a\u003e [name\\_overrides](#input\\_name\\_overrides)\n\nDescription: This variable allows you to overwrite generated names of most resources created by this module. This can be handy when importing existing resources to the Terraform state. e.g. using an existing storage Account but not bringing it into the module but import it into the state and let it be managed by the module.\n\nType:\n\n```hcl\nobject({\n    key_vault                      = optional(string)\n    key_vault_private_endpoint     = optional(string)\n    virtual_machine_scale_set_name = optional(string)\n    network_security_group         = optional(string)\n    storage_account                = optional(string)\n    storage_container              = optional(string)\n    storage_container_data         = optional(string)\n    storage_private_endpoint       = optional(string)\n    subnet                         = optional(string)\n    user_assigned_identity         = optional(string)\n    virtual_network                = optional(string)\n  })\n```\n\nDefault: `{}`\n\n### \u003ca name=\"input_name_suffix\"\u003e\u003c/a\u003e [name\\_suffix](#input\\_name\\_suffix)\n\nDescription: An optional suffix appended to the base name for all resources created by this module.\n\n**NOTE**: This suffix is not applied to resources that use a randomly generated suffix (e.g., Key Vault and Storage Account).\n\nType: `string`\n\nDefault: `null`\n\n### \u003ca name=\"input_role_definition_name\"\u003e\u003c/a\u003e [role\\_definition\\_name](#input\\_role\\_definition\\_name)\n\nDescription: Specifies the role definition name to be assigned to the Launchpad. Allowed values: `Contributor` and `Owner`.\n\nType: `string`\n\nDefault: `\"Owner\"`\n\n### \u003ca name=\"input_rolling_upgrade_policy\"\u003e\u003c/a\u003e [rolling\\_upgrade\\_policy](#input\\_rolling\\_upgrade\\_policy)\n\nDescription: Provides advanced configuration for the rolling upgrade policy. This block is *required* and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`.\n\nRequired arguments:\n\nArgument | Description\n-- | --\n`max_batch_instance_percent` | The maximum percent of total virtual machine instances that will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum, unhealthy instances in previous or future batches can cause the percentage of instances in a batch to decrease to ensure higher reliability.\n`max_unhealthy_instance_percent` | The maximum percentage of the total virtual machine instances in the scale set that can be simultaneously unhealthy, either as a result of being upgraded, or by being found in an unhealthy state by the virtual machine health checks before the rolling upgrade aborts. This constraint will be checked prior to starting any batch.\n`max_unhealthy_upgraded_instance_percent` | The maximum percentage of upgraded virtual machine instances that can be found to be in an unhealthy state. This check will happen after each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts.\n`pause_time_between_batches` | The wait time between completing the update for all virtual machines in one batch and starting the next batch. The time duration should be specified in [ISO 8601 duration format](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) (e.g. `PT10M` to `PT90M`).\n\nOptional Arguments:\n\nArgument | Description\n-- | --\n`cross_zone_upgrades_enabled` | Should the Virtual Machine Scale Set ignore the Azure Zone boundaries when constructing upgrade batches? Possible values are true or false.\n`prioritize_unhealthy_instances_enabled` | Upgrade all unhealthy instances in a scale set before any healthy instances. Possible values are true or false.\n`maximum_surge_instances_enabled` | Create new virtual machines to upgrade the scale set, rather than updating the existing virtual machines. Existing virtual machines will be deleted once the new virtual machines are created for each batch. Possible values are true or false.\n\nType:\n\n```hcl\nobject({\n    max_batch_instance_percent              = string\n    max_unhealthy_instance_percent          = string\n    max_unhealthy_upgraded_instance_percent = string\n    pause_time_between_batches              = string\n\n    cross_zone_upgrades_enabled            = optional(bool)\n    maximum_surge_instances_enabled        = optional(bool)\n    prioritize_unhealthy_instances_enabled = optional(bool)\n  })\n```\n\nDefault: `null`\n\n### \u003ca name=\"input_runner_arch\"\u003e\u003c/a\u003e [runner\\_arch](#input\\_runner\\_arch)\n\nDescription: The CPU architecture to run the GitHub actions runner. Can be `x64` or `arm64`.\n\nType: `string`\n\nDefault: `\"arm64\"`\n\n### \u003ca name=\"input_runner_count\"\u003e\u003c/a\u003e [runner\\_count](#input\\_runner\\_count)\n\nDescription: Specify the number of instances of a GitHub Action runner to install on a single virtual machine instance.\n\nType: `string`\n\nDefault: `\"5\"`\n\n### \u003ca name=\"input_runner_github_environments\"\u003e\u003c/a\u003e [runner\\_github\\_environments](#input\\_runner\\_github\\_environments)\n\nDescription: List of Github environments used by federal identity.\n\nType: `map(string)`\n\nDefault:\n\n```json\n{\n  \"prod-azure\": \"prod-azure\",\n  \"prod-azure-plan\": \"prod-azure (plan)\"\n}\n```\n\n### \u003ca name=\"input_runner_public_ip_address\"\u003e\u003c/a\u003e [runner\\_public\\_ip\\_address](#input\\_runner\\_public\\_ip\\_address)\n\nDescription: Set the value of this variable to `true` if you want to allocate a public IP address to each instance within the Virtual Machine Scale Set. Enabling this option may be necessary to establish internet access when a direct connection to a HUB is currently unavailable.\n\nType: `bool`\n\nDefault: `false`\n\n### \u003ca name=\"input_runner_user\"\u003e\u003c/a\u003e [runner\\_user](#input\\_runner\\_user)\n\nDescription: An unprivileged user to run the Runner application. If this user does not exist on the system, a new user will be created.\n\nType: `string`\n\nDefault: `\"actions-runner\"`\n\n### \u003ca name=\"input_runner_version\"\u003e\u003c/a\u003e [runner\\_version](#input\\_runner\\_version)\n\nDescription: Set a specific GitHub action runner version (without the `v` in the version string) or use `latest`.\n\nType: `string`\n\nDefault: `\"latest\"`\n\n### \u003ca name=\"input_runner_vm_instances\"\u003e\u003c/a\u003e [runner\\_vm\\_instances](#input\\_runner\\_vm\\_instances)\n\nDescription: Set the amount of VM´s in the Virtual Machine Sscale Set (VMSS). (Default '1')\n\nType: `string`\n\nDefault: `1`\n\n### \u003ca name=\"input_service_endpoints\"\u003e\u003c/a\u003e [service\\_endpoints](#input\\_service\\_endpoints)\n\nDescription:   The list of Service endpoints to associate with the subnet. Possible values include: `Microsoft.AzureActiveDirectory`, `Microsoft.AzureCosmosDB`, `Microsoft.ContainerRegistry`, `Microsoft.EventHub`, `Microsoft.KeyVault`, `Microsoft.ServiceBus`, `Microsoft.Sql`, `Microsoft.Storage`, `Microsoft.Storage`.Global and `Microsoft.Web`.\n\n**NOTE**: In order to use `Microsoft.Storage.Global` service endpoint (which allows access to virtual networks in other regions), you must enable the `AllowGlobalTagsForStorage` feature in your subscription. This is currently a preview feature, please see the [official documentation](https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security?tabs=azure-cli#enabling-access-to-virtual-networks-in-other-regions-preview) for more information.\n\nType: `list(string)`\n\nDefault:\n\n```json\n[\n  \"Microsoft.KeyVault\",\n  \"Microsoft.Storage\"\n]\n```\n\n### \u003ca name=\"input_storage_account_deletion_lock\"\u003e\u003c/a\u003e [storage\\_account\\_deletion\\_lock](#input\\_storage\\_account\\_deletion\\_lock)\n\nDescription: Whether a deletion lock should be applied to the Storage Account to prevent accidental deletion and ensure data loss prevention.\n\nType: `bool`\n\nDefault: `true`\n\n### \u003ca name=\"input_subnet_address_prefixes\"\u003e\u003c/a\u003e [subnet\\_address\\_prefixes](#input\\_subnet\\_address\\_prefixes)\n\nDescription: A list of IP address prefixes (CIDR blocks) to be assigned to the subnet. Each entry in the list represents a CIDR block used to define the address space of the subnet within the virtual network.\n\nType: `list(string)`\n\nDefault: `[]`\n\n### \u003ca name=\"input_subnet_id\"\u003e\u003c/a\u003e [subnet\\_id](#input\\_subnet\\_id)\n\nDescription: The ID of an existing subnet where the Launchpad will be deployed. If `subnet_id` is specified, both `subnet_address_prefixes` and `virtual_network_address_space` must be not set. Conversely, if `subnet_id` is not specified, both `subnet_address_prefixes` and `virtual_network_address_space` must be provided.\n\nType: `string`\n\nDefault: `null`\n\n### \u003ca name=\"input_subscription_ids\"\u003e\u003c/a\u003e [subscription\\_ids](#input\\_subscription\\_ids)\n\nDescription: A list of subscription IDs, which the Launchpad will manage.Each must be exactly 36 characters long.\n\nType: `list(string)`\n\nDefault: `[]`\n\n### \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags)\n\nDescription: A mapping of tags which should be assigned to all resources in this module.\n\nType: `map(string)`\n\nDefault: `{}`\n\n### \u003ca name=\"input_upgrade_mode\"\u003e\u003c/a\u003e [upgrade\\_mode](#input\\_upgrade\\_mode)\n\nDescription:     Specifies how Upgrades (e.g. changing the Image/SKU) should be performed to Virtual Machine Instances. Possible values are `Automatic`, `Manual` and `Rolling`.\n\n    **Note**: If rolling upgrades are configured and running on a Linux Virtual Machine Scale Set, they will be cancelled when Terraform tries to destroy the resource.\n\nType: `string`\n\nDefault: `\"Manual\"`\n\n### \u003ca name=\"input_virtual_network_address_space\"\u003e\u003c/a\u003e [virtual\\_network\\_address\\_space](#input\\_virtual\\_network\\_address\\_space)\n\nDescription: A list of IP address ranges to be assigned to the virtual network (VNet). Each entry in the list represents a CIDR block used to define the address space of the VNet.\n\nType: `list(string)`\n\nDefault: `[]`\n\n## Outputs\n\nThe following outputs are exported:\n\n### \u003ca name=\"output_LAUNCHPAD_AZURE_CLIENT_ID\"\u003e\u003c/a\u003e [LAUNCHPAD\\_AZURE\\_CLIENT\\_ID](#output\\_LAUNCHPAD\\_AZURE\\_CLIENT\\_ID)\n\nDescription: The client ID of the Azure user identity assigned to the Launchpad.\n\n### \u003ca name=\"output_LAUNCHPAD_AZURE_STORAGE_ACCOUNT_NAME\"\u003e\u003c/a\u003e [LAUNCHPAD\\_AZURE\\_STORAGE\\_ACCOUNT\\_NAME](#output\\_LAUNCHPAD\\_AZURE\\_STORAGE\\_ACCOUNT\\_NAME)\n\nDescription: The storage account name used by the Launchpad for the Terraform state backend.\n\n### \u003ca name=\"output_LAUNCHPAD_AZURE_TENANT_ID\"\u003e\u003c/a\u003e [LAUNCHPAD\\_AZURE\\_TENANT\\_ID](#output\\_LAUNCHPAD\\_AZURE\\_TENANT\\_ID)\n\nDescription: The tenant ID of the Azure user identity assigned to the Launchpad\n\n### \u003ca name=\"output_key_vault_private_endpoint_private_ip_address\"\u003e\u003c/a\u003e [key\\_vault\\_private\\_endpoint\\_private\\_ip\\_address](#output\\_key\\_vault\\_private\\_endpoint\\_private\\_ip\\_address)\n\nDescription: The private IP address of the private endpoint associated with the Key Vault. This endpoint is created only if `create_key_vault` is set to `true`. If `create_key_vault` is `false`, this output will be `null`.\n\n### \u003ca name=\"output_network_security_group_id\"\u003e\u003c/a\u003e [network\\_security\\_group\\_id](#output\\_network\\_security\\_group\\_id)\n\nDescription: The ID of the Azure Network Security Group (NSG) associated with the Launchpad. If `var.subnet_id` is specified, no Azure Network Security Group (NSG) ID is returned.\n\n### \u003ca name=\"output_network_security_group_name\"\u003e\u003c/a\u003e [network\\_security\\_group\\_name](#output\\_network\\_security\\_group\\_name)\n\nDescription: The name of the Azure Network Security Group (NSG) associated with the Launchpad. If `var.subnet_id` is specified, no Azure Network Security Group (NSG) Name is returned.\n\n### \u003ca name=\"output_principal_id\"\u003e\u003c/a\u003e [principal\\_id](#output\\_principal\\_id)\n\nDescription: The principal ID of the Azure user identity assigned to the Launchpad.\n\n### \u003ca name=\"output_subnet_id\"\u003e\u003c/a\u003e [subnet\\_id](#output\\_subnet\\_id)\n\nDescription: The ID of the subnet within the Virtual Network associated with the Launchpad. If `var.subnet_id` is specified, its value is used for this output. Otherwise, the ID of the subnet created by this module is returned.\n\n### \u003ca name=\"output_subnet_name\"\u003e\u003c/a\u003e [subnet\\_name](#output\\_subnet\\_name)\n\nDescription: The name of the subnet within the Virtual Network associated with the Launchpad. If `var.subnet_id` is not specified, the name of the subnet created by this module is returned. Otherwise, the name is extracted from the specified `var.subnet_id`.\n\n### \u003ca name=\"output_virtual_machine_scale_set_id\"\u003e\u003c/a\u003e [virtual\\_machine\\_scale\\_set\\_id](#output\\_virtual\\_machine\\_scale\\_set\\_id)\n\nDescription: The ID of the Azure Virtual Machine Scaleset associated with the Launchpad.\n\n### \u003ca name=\"output_virtual_machine_scale_set_name\"\u003e\u003c/a\u003e [virtual\\_machine\\_scale\\_set\\_name](#output\\_virtual\\_machine\\_scale\\_set\\_name)\n\nDescription: The name of the Azure Linux Virtual Machine Scale Set resource\n\n### \u003ca name=\"output_virtual_network_id\"\u003e\u003c/a\u003e [virtual\\_network\\_id](#output\\_virtual\\_network\\_id)\n\nDescription: The ID of the Azure Virtual Network (VNet) associated with the Launchpad. If `var.subnet_id` is not specified, the ID of the Virtual Network created by this module is returned. Otherwise, the Virtual Network ID is derived from the specified `var.subnet_id`.\n\n### \u003ca name=\"output_virtual_network_name\"\u003e\u003c/a\u003e [virtual\\_network\\_name](#output\\_virtual\\_network\\_name)\n\nDescription: The name of the Azure Virtual Network (VNet) associated with the Launchpad. If `var.subnet_id` is not specified, the name of the Virtual Network created by this module is returned. Otherwise, the name is extracted from the specified `var.subnet_id`.\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudeteer%2Fterraform-azurerm-launchpad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudeteer%2Fterraform-azurerm-launchpad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudeteer%2Fterraform-azurerm-launchpad/lists"}