├── CHANGELOG-v3.md ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── Feature_Request.yml │ └── Bug_Report.yml ├── dependabot.yml ├── workflows │ ├── breaking-change-detect.yaml │ ├── post-push.yaml │ ├── pr-check.yaml │ └── acc-test.yaml └── pull_request_template.md ├── examples └── startup │ ├── outputs.tf │ ├── variables.tf │ ├── versions.tf │ ├── main.tf │ └── TestRecord.md ├── locals.tf ├── GNUmakefile ├── versions.tf ├── .devcontainer └── devcontainer.json ├── outputs.tf ├── test ├── upgrade │ └── upgrade_test.go ├── e2e │ └── terraform_azurerm_network_test.go └── go.mod ├── LICENSE ├── .gitignore ├── SECURITY.md ├── tfvmmakefile ├── variables.tf ├── main.tf ├── CHANGELOG.md ├── CHANGELOG-v4.md └── README.md /CHANGELOG-v3.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /examples/startup/outputs.tf: -------------------------------------------------------------------------------- 1 | output "test_vnet_id" { 2 | value = module.network.vnet_id 3 | } 4 | -------------------------------------------------------------------------------- /locals.tf: -------------------------------------------------------------------------------- 1 | locals { 2 | subnet_names_prefixes_map = zipmap(var.subnet_names, var.subnet_prefixes) 3 | } -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "gomod" 4 | directory: "/test" 5 | schedule: 6 | interval: "weekly" -------------------------------------------------------------------------------- /examples/startup/variables.tf: -------------------------------------------------------------------------------- 1 | variable "location" { 2 | type = string 3 | default = "westus" 4 | } 5 | 6 | variable "use_for_each" { 7 | type = bool 8 | default = true 9 | } 10 | -------------------------------------------------------------------------------- /GNUmakefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | $(shell curl -H 'Cache-Control: no-cache, no-store' -sSL "https://raw.githubusercontent.com/Azure/tfmod-scaffold/refs/heads/main/GNUmakefile" -o tfvmmakefile) 4 | -include tfvmmakefile -------------------------------------------------------------------------------- /versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_version = ">= 1.3" 3 | 4 | required_providers { 5 | azurerm = { 6 | source = "hashicorp/azurerm" 7 | version = ">= 3.0, < 4.0" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.github/workflows/breaking-change-detect.yaml: -------------------------------------------------------------------------------- 1 | name: 'Comment on PR' 2 | 3 | on: 4 | workflow_run: 5 | workflows: ["Pre Pull Request Check"] 6 | types: 7 | - completed 8 | 9 | jobs: 10 | comment: 11 | uses: Azure/tfmod-scaffold/.github/workflows/breaking-change-detect.yaml@main -------------------------------------------------------------------------------- /examples/startup/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_version = ">= 1.3" 3 | 4 | required_providers { 5 | azurerm = { 6 | source = "hashicorp/azurerm" 7 | version = ">= 3.0, < 4.0" 8 | } 9 | 10 | random = { 11 | source = "hashicorp/random" 12 | version = ">= 3.0" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.github/workflows/post-push.yaml: -------------------------------------------------------------------------------- 1 | name: Post Push 2 | on: 3 | push: 4 | branches: 5 | - main 6 | - master 7 | tags: 8 | - '*' 9 | 10 | permissions: write-all 11 | 12 | jobs: 13 | post-push: 14 | if: github.actor != 'github-actions[bot]' 15 | uses: Azure/tfmod-scaffold/.github/workflows/post-push.yaml@main -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Describe your changes 2 | 3 | ## Issue number 4 | 5 | #000 6 | 7 | ## Checklist before requesting a review 8 | - [ ] The pr title can be used to describe what this pr did in `CHANGELOG.md` file 9 | - [ ] I have executed pre-commit on my machine 10 | - [ ] I have passed pr-check on my machine 11 | 12 | Thanks for your cooperation! 13 | 14 | -------------------------------------------------------------------------------- /.github/workflows/pr-check.yaml: -------------------------------------------------------------------------------- 1 | name: Pre Pull Request Check 2 | on: 3 | pull_request: 4 | types: ['opened', 'synchronize'] 5 | paths: 6 | - '.github/**' 7 | - '**.go' 8 | - '**.tf' 9 | - '.github/workflows/**' 10 | - '**.md' 11 | - '**/go.mod' 12 | 13 | jobs: 14 | prepr-check: 15 | uses: Azure/tfmod-scaffold/.github/workflows/pr-check.yaml@main -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "image": "mcr.microsoft.com/azterraform:latest", 3 | 4 | "runArgs": [ 5 | "--cap-add=SYS_PTRACE", 6 | "--security-opt", 7 | "seccomp=unconfined", 8 | "--init", 9 | "--network=host" 10 | ], 11 | 12 | "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ], 13 | "customizations": { 14 | "vscode": { 15 | "settings": { 16 | "go.toolsManagement.checkForUpdates": "local", 17 | "go.useLanguageServer": true, 18 | "go.goroot": "/usr/local/go" 19 | }, 20 | "extensions": [ 21 | "hashicorp.terraform", 22 | "golang.Go" 23 | ] 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /outputs.tf: -------------------------------------------------------------------------------- 1 | output "vnet_address_space" { 2 | description = "The address space of the newly created vNet" 3 | value = azurerm_virtual_network.vnet.address_space 4 | } 5 | 6 | output "vnet_id" { 7 | description = "The id of the newly created vNet" 8 | value = azurerm_virtual_network.vnet.id 9 | } 10 | 11 | output "vnet_location" { 12 | description = "The location of the newly created vNet" 13 | value = azurerm_virtual_network.vnet.location 14 | } 15 | 16 | output "vnet_name" { 17 | description = "The name of the newly created vNet" 18 | value = azurerm_virtual_network.vnet.name 19 | } 20 | 21 | output "vnet_subnets" { 22 | description = "The ids of subnets created inside the newly created vNet" 23 | value = local.azurerm_subnets[*].id 24 | } 25 | -------------------------------------------------------------------------------- /test/upgrade/upgrade_test.go: -------------------------------------------------------------------------------- 1 | package upgrade 2 | 3 | import ( 4 | "testing" 5 | 6 | test_helper "github.com/Azure/terraform-module-test-helper" 7 | "github.com/gruntwork-io/terratest/modules/terraform" 8 | ) 9 | 10 | func TestExampleUpgrade_startup(t *testing.T) { 11 | t.Run("for_each", func(t *testing.T) { 12 | upgradeTest(t, true) 13 | }) 14 | t.Run("count", func(t *testing.T) { 15 | upgradeTest(t, false) 16 | }) 17 | } 18 | 19 | func upgradeTest(t *testing.T, useForEach bool) { 20 | currentRoot, err := test_helper.GetCurrentModuleRootPath() 21 | if err != nil { 22 | t.FailNow() 23 | } 24 | currentMajorVersion, err := test_helper.GetCurrentMajorVersionFromEnv() 25 | if err != nil { 26 | t.FailNow() 27 | } 28 | vars := map[string]interface{}{ 29 | "use_for_each": useForEach, 30 | } 31 | test_helper.ModuleUpgradeTest(t, "Azure", "terraform-azurerm-network", "examples/startup", currentRoot, terraform.Options{ 32 | Upgrade: true, 33 | Vars: vars, 34 | }, currentMajorVersion) 35 | } 36 | -------------------------------------------------------------------------------- /test/e2e/terraform_azurerm_network_test.go: -------------------------------------------------------------------------------- 1 | package e2e 2 | 3 | import ( 4 | "regexp" 5 | "testing" 6 | 7 | test_helper "github.com/Azure/terraform-module-test-helper" 8 | "github.com/gruntwork-io/terratest/modules/terraform" 9 | "github.com/stretchr/testify/assert" 10 | ) 11 | 12 | func TestStartup(t *testing.T) { 13 | t.Run("for_each", func(t *testing.T) { 14 | testStartup(t, true) 15 | }) 16 | t.Run("count", func(t *testing.T) { 17 | testStartup(t, false) 18 | }) 19 | } 20 | 21 | func testStartup(t *testing.T, useForEach bool) { 22 | vars := map[string]interface{}{ 23 | "use_for_each": useForEach, 24 | } 25 | test_helper.RunE2ETest(t, "../../", "examples/startup", terraform.Options{ 26 | Upgrade: true, 27 | Vars: vars, 28 | }, func(t *testing.T, output test_helper.TerraformOutput) { 29 | vnetId, ok := output["test_vnet_id"].(string) 30 | assert.True(t, ok) 31 | assert.Regexp(t, regexp.MustCompile("/subscriptions/.+/resourceGroups/.+/providers/Microsoft.Network/virtualNetworks/.+"), vnetId) 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /.github/workflows/acc-test.yaml: -------------------------------------------------------------------------------- 1 | name: E2E Test 2 | on: 3 | pull_request: 4 | types: [ 'opened', 'synchronize' ] 5 | paths: 6 | - '.github/**' 7 | - '**.go' 8 | - '**.tf' 9 | - '.github/workflows/**' 10 | - '**.md' 11 | - '**/go.mod' 12 | 13 | jobs: 14 | check: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checking for Fork 18 | shell: pwsh 19 | run: | 20 | $isFork = "${{ github.event.pull_request.head.repo.fork }}" 21 | if($isFork -eq "true") { 22 | echo "### WARNING: This workflow is disabled for forked repositories. Please follow the [release branch process](https://azure.github.io/Azure-Verified-Modules/contributing/terraform/terraform-contribution-flow/#5-create-a-pull-request-to-the-upstream-repository) if end to end tests are required." >> $env:GITHUB_STEP_SUMMARY 23 | } 24 | 25 | run-e2e-tests: 26 | if: github.event.pull_request.head.repo.fork == false 27 | uses: Azure/tfmod-scaffold/.github/workflows/tfvm_e2e.yaml@main 28 | name: end to end 29 | secrets: inherit 30 | permissions: 31 | id-token: write 32 | contents: read -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE -------------------------------------------------------------------------------- /examples/startup/main.tf: -------------------------------------------------------------------------------- 1 | provider "azurerm" { 2 | features {} 3 | } 4 | 5 | resource "random_id" "rg_name" { 6 | byte_length = 8 7 | } 8 | 9 | resource "azurerm_resource_group" "test" { 10 | location = var.location 11 | name = "testRG-${random_id.rg_name.hex}" 12 | } 13 | 14 | module "network" { 15 | source = "../../" 16 | resource_group_name = azurerm_resource_group.test.name 17 | address_spaces = ["10.0.0.0/16", "10.2.0.0/16"] 18 | subnet_prefixes = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] 19 | subnet_names = ["subnet1", "subnet2", "subnet3"] 20 | 21 | subnet_enforce_private_link_endpoint_network_policies = { 22 | "subnet1" : true 23 | } 24 | subnet_delegation = { 25 | subnet1 = [ 26 | { 27 | name = "delegation" 28 | service_delegation = { 29 | name = "Microsoft.ContainerInstance/containerGroups" 30 | actions = [ 31 | "Microsoft.Network/virtualNetworks/subnets/action", 32 | ] 33 | } 34 | } 35 | ] 36 | } 37 | subnet_service_endpoints = { 38 | "subnet1" : ["Microsoft.Sql"] 39 | } 40 | 41 | tags = { 42 | environment = "dev" 43 | costcenter = "it" 44 | } 45 | use_for_each = var.use_for_each 46 | } 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Variable files 2 | terraform.tfvars 3 | 4 | ### https://raw.github.com/github/gitignore/abad92dac5a4306f72242dae3bca6e277bce3615/Terraform.gitignore 5 | 6 | # Compiled files 7 | *.tfstate 8 | *.tfstate.backup 9 | 10 | # Terraform directory 11 | .terraform/ 12 | terraform.tfstate.d/ 13 | logs/ 14 | 15 | **/.terraform.lock.hcl 16 | .terraform.locl.hcl 17 | 18 | # Go vendor directory 19 | vendor/ 20 | 21 | # Files generated by terratest 22 | .test-data/ 23 | 24 | # Terraform log file 25 | terraform.log 26 | 27 | ### https://raw.github.com/github/gitignore/abad92dac5a4306f72242dae3bca6e277bce3615/Global/Vim.gitignore 28 | 29 | # swap 30 | [._]*.s[a-w][a-z] 31 | [._]s[a-w][a-z] 32 | # session 33 | Session.vim 34 | # temporary 35 | .netrwhist 36 | *~ 37 | # auto-generated tag files 38 | tags 39 | 40 | # IDE configs 41 | .idea 42 | 43 | # Ruby download package lock file. 44 | Gemfile.lock 45 | 46 | # Mac folder attribute file 47 | .DS_Store 48 | 49 | 50 | .terraform.tfstate.lock.info 51 | 52 | # SSH Key 53 | private_ssh_key 54 | 55 | # generated readme by the pr-check job 56 | 57 | README-generated.md 58 | 59 | **/override.tf 60 | 61 | .tflint.hcl 62 | .tflint_example.hcl 63 | .tflint.merged.hcl 64 | .tflint_example.merged.hcl 65 | 66 | tfmod-scaffold/ 67 | scripts 68 | test/go.sum 69 | 70 | /TestRecord 71 | **/TestRecord.md.tmp -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_Request.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: I have a suggestion (and might want to implement myself)! 3 | title: "Support for [thing]" 4 | body: 5 | - type: checkboxes 6 | attributes: 7 | label: Is there an existing issue for this? 8 | description: Please search to see if an issue already exists for the feature you are requesting. 9 | options: 10 | - label: I have searched the existing issues 11 | required: true 12 | - type: textarea 13 | id: description 14 | attributes: 15 | label: Description 16 | description: Please leave a helpful description of the feature request here. 17 | validations: 18 | required: true 19 | - type: input 20 | id: resource 21 | attributes: 22 | label: New or Affected Resource(s)/Data Source(s) 23 | description: Please list the new or affected resources and/or data sources. 24 | placeholder: azurerm_XXXXX 25 | validations: 26 | required: true 27 | - type: textarea 28 | id: config 29 | attributes: 30 | label: Potential Terraform Configuration 31 | description: Please provide an example of what the enhancement could look like on this Terraform module. 32 | render: hcl 33 | - type: textarea 34 | id: references 35 | attributes: 36 | label: References 37 | description: | 38 | Information about referencing Github Issues: https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests 39 | 40 | Are there any other GitHub issues (open or closed) or pull requests that should be linked here? Vendor blog posts or documentation? For example: 41 | 42 | * https://azure.microsoft.com/en-us/roadmap/virtual-network-service-endpoint-for-azure-cosmos-db/ -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /tfvmmakefile: -------------------------------------------------------------------------------- 1 | REMOTE_SCRIPT := "https://raw.githubusercontent.com/Azure/tfmod-scaffold/main/scripts" 2 | 3 | fmt: 4 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/fmt.sh" | bash 5 | 6 | fumpt: 7 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/fumpt.sh" | bash 8 | 9 | gosec: 10 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/gosec.sh" | bash 11 | 12 | tffmt: 13 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/tffmt.sh" | bash 14 | 15 | tffmtcheck: 16 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/terraform-fmt.sh" | bash 17 | 18 | tfvalidatecheck: 19 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/terraform-validate.sh" | bash 20 | 21 | terrafmtcheck: 22 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/terrafmt-check.sh" | bash 23 | 24 | gofmtcheck: 25 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/gofmtcheck.sh" | bash 26 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/fumptcheck.sh" | bash 27 | 28 | golint: 29 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/run-golangci-lint.sh" | bash 30 | 31 | tflint: 32 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/run-tflint.sh" | bash 33 | 34 | lint: golint tflint gosec 35 | 36 | checkovcheck: 37 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/checkovcheck.sh" | bash 38 | 39 | checkovplancheck: 40 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/checkovplancheck.sh" | bash 41 | 42 | fmtcheck: gofmtcheck tfvalidatecheck tffmtcheck terrafmtcheck 43 | 44 | pr-check: depscheck fmtcheck lint unit-test checkovcheck 45 | 46 | unit-test: 47 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/run-unit-test.sh" | bash 48 | 49 | e2e-test: 50 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/run-e2e-test.sh" | bash 51 | 52 | version-upgrade-test: 53 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/version-upgrade-test.sh" | bash 54 | 55 | terrafmt: 56 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/terrafmt.sh" | bash 57 | 58 | pre-commit: tffmt terrafmt depsensure fmt fumpt generate 59 | 60 | depsensure: 61 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/deps-ensure.sh" | bash 62 | 63 | depscheck: 64 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/deps-check.sh" | bash 65 | 66 | generate: 67 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/generate.sh" | bash 68 | 69 | gencheck: 70 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/gencheck.sh" | bash 71 | 72 | yor-tag: 73 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/yor-tag.sh" | bash 74 | 75 | autofix: 76 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/autofix.sh" | bash 77 | 78 | test: fmtcheck 79 | @TEST=$(TEST) curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/run-gradually-deprecated.sh" | bash 80 | @TEST=$(TEST) curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/run-test.sh" | bash 81 | 82 | build-test: 83 | curl -H 'Cache-Control: no-cache, no-store' -sSL "$(REMOTE_SCRIPT)/build-test.sh" | bash 84 | 85 | .PHONY: fmt fmtcheck pr-check -------------------------------------------------------------------------------- /variables.tf: -------------------------------------------------------------------------------- 1 | variable "resource_group_name" { 2 | type = string 3 | description = "The name of an existing resource group to be imported." 4 | } 5 | 6 | variable "use_for_each" { 7 | type = bool 8 | description = "Use `for_each` instead of `count` to create multiple resource instances." 9 | nullable = false 10 | } 11 | 12 | variable "address_space" { 13 | type = string 14 | default = "10.0.0.0/16" 15 | description = "The address space that is used by the virtual network." 16 | } 17 | 18 | variable "address_spaces" { 19 | type = list(string) 20 | default = [] 21 | description = "The list of the address spaces that is used by the virtual network." 22 | } 23 | 24 | # If no values specified, this defaults to Azure DNS 25 | variable "dns_servers" { 26 | type = list(string) 27 | default = [] 28 | description = "The DNS servers to be used with vNet." 29 | } 30 | 31 | variable "resource_group_location" { 32 | type = string 33 | default = null 34 | description = "The location/region where the virtual network is created. Changing this forces a new resource to be created." 35 | } 36 | 37 | variable "subnet_delegation" { 38 | type = map(list(object({ 39 | name = string 40 | service_delegation = object({ 41 | name = string 42 | actions = optional(list(string)) 43 | }) 44 | }))) 45 | default = {} 46 | description = "`service_delegation` blocks for `azurerm_subnet` resource, subnet names as keys, list of delegation blocks as value, more details about delegation block could be found at the [document](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet#delegation)." 47 | nullable = false 48 | } 49 | 50 | variable "subnet_enforce_private_link_endpoint_network_policies" { 51 | type = map(bool) 52 | default = {} 53 | description = "A map with key (string) `subnet name`, value (bool) `true` or `false` to indicate enable or disable network policies for the private link endpoint on the subnet. Default value is false." 54 | } 55 | 56 | variable "subnet_names" { 57 | type = list(string) 58 | default = ["subnet1"] 59 | description = "A list of public subnets inside the vNet." 60 | } 61 | 62 | variable "subnet_prefixes" { 63 | type = list(string) 64 | default = ["10.0.1.0/24"] 65 | description = "The address prefix to use for the subnet." 66 | } 67 | 68 | variable "subnet_service_endpoints" { 69 | type = map(list(string)) 70 | default = {} 71 | description = "A map with key (string) `subnet name`, value (list(string)) to indicate enabled service endpoints on the subnet. Default value is []." 72 | } 73 | 74 | variable "tags" { 75 | type = map(string) 76 | default = { 77 | environment = "dev" 78 | } 79 | description = "The tags to associate with your network and subnets." 80 | } 81 | 82 | # tflint-ignore: terraform_unused_declarations 83 | variable "tracing_tags_enabled" { 84 | type = bool 85 | default = false 86 | description = "Whether enable tracing tags that generated by BridgeCrew Yor." 87 | nullable = false 88 | } 89 | 90 | # tflint-ignore: terraform_unused_declarations 91 | variable "tracing_tags_prefix" { 92 | type = string 93 | default = "avm_" 94 | description = "Default prefix for generated tracing tags" 95 | nullable = false 96 | } 97 | 98 | variable "vnet_name" { 99 | type = string 100 | default = "acctvnet" 101 | description = "Name of the vnet to create." 102 | } 103 | -------------------------------------------------------------------------------- /main.tf: -------------------------------------------------------------------------------- 1 | #Azure Generic vNet Module 2 | data "azurerm_resource_group" "network" { 3 | count = var.resource_group_location == null ? 1 : 0 4 | 5 | name = var.resource_group_name 6 | } 7 | 8 | locals { 9 | resource_group_location = var.resource_group_location == null ? data.azurerm_resource_group.network[0].location : var.resource_group_location 10 | } 11 | 12 | resource "azurerm_virtual_network" "vnet" { 13 | address_space = length(var.address_spaces) == 0 ? [var.address_space] : var.address_spaces 14 | location = local.resource_group_location 15 | name = var.vnet_name 16 | resource_group_name = var.resource_group_name 17 | dns_servers = var.dns_servers 18 | tags = merge(var.tags, (/**/ (var.tracing_tags_enabled ? { for k, v in /**/ { 19 | avm_git_commit = "c506f86f75a34ad34c2b4437e8076f1f06bf6a00" 20 | avm_git_file = "main.tf" 21 | avm_git_last_modified_at = "2022-11-23 09:20:55" 22 | avm_git_org = "Azure" 23 | avm_git_repo = "terraform-azurerm-network" 24 | avm_yor_trace = "7f614813-224a-46c0-91d7-855dc7d6d5db" 25 | } /**/ : replace(k, "avm_", var.tracing_tags_prefix) => v } : {}) /**/), (/**/ (var.tracing_tags_enabled ? { for k, v in /**/ { 26 | avm_yor_name = "vnet" 27 | } /**/ : replace(k, "avm_", var.tracing_tags_prefix) => v } : {}) /**/)) 28 | } 29 | 30 | moved { 31 | from = azurerm_subnet.subnet 32 | to = azurerm_subnet.subnet_count 33 | } 34 | 35 | resource "azurerm_subnet" "subnet_count" { 36 | count = var.use_for_each ? 0 : length(var.subnet_names) 37 | 38 | address_prefixes = [var.subnet_prefixes[count.index]] 39 | name = var.subnet_names[count.index] 40 | resource_group_name = var.resource_group_name 41 | virtual_network_name = azurerm_virtual_network.vnet.name 42 | enforce_private_link_endpoint_network_policies = lookup(var.subnet_enforce_private_link_endpoint_network_policies, var.subnet_names[count.index], false) 43 | service_endpoints = lookup(var.subnet_service_endpoints, var.subnet_names[count.index], []) 44 | 45 | dynamic "delegation" { 46 | for_each = lookup(var.subnet_delegation, var.subnet_names[count.index], []) 47 | 48 | content { 49 | name = delegation.value.name 50 | 51 | service_delegation { 52 | name = delegation.value.service_delegation.name 53 | actions = delegation.value.service_delegation.actions 54 | } 55 | } 56 | } 57 | } 58 | 59 | resource "azurerm_subnet" "subnet_for_each" { 60 | for_each = var.use_for_each ? toset(var.subnet_names) : [] 61 | 62 | address_prefixes = [local.subnet_names_prefixes_map[each.value]] 63 | name = each.value 64 | resource_group_name = var.resource_group_name 65 | virtual_network_name = azurerm_virtual_network.vnet.name 66 | enforce_private_link_endpoint_network_policies = lookup(var.subnet_enforce_private_link_endpoint_network_policies, each.value, false) 67 | service_endpoints = lookup(var.subnet_service_endpoints, each.value, []) 68 | 69 | dynamic "delegation" { 70 | for_each = lookup(var.subnet_delegation, each.value, []) 71 | 72 | content { 73 | name = delegation.value.name 74 | 75 | service_delegation { 76 | name = delegation.value.service_delegation.name 77 | actions = delegation.value.service_delegation.actions 78 | } 79 | } 80 | } 81 | } 82 | 83 | locals { 84 | azurerm_subnets = var.use_for_each ? [for s in azurerm_subnet.subnet_for_each : s] : [for s in azurerm_subnet.subnet_count : s] 85 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Bug_Report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: If something isn't working as expected. 3 | labels: [bug] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to fill out a bug report. 9 | 10 | If you are not running the latest version of this module, please try to reproduce your bug with the latest version before opening an issue. 11 | - type: checkboxes 12 | attributes: 13 | label: Is there an existing issue for this? 14 | description: Please search to see if an issue already exists for the bug you encountered. 15 | options: 16 | - label: I have searched the existing issues 17 | required: true 18 | - type: dropdown 19 | attributes: 20 | label: Greenfield/Brownfield provisioning 21 | description: Do you reproduce the bug with a new infrastructure provisioning (greenfield) or you need an existing infrastructure with an existing terraform state (brownfield) to reproduce the bug ? 22 | multiple: false 23 | options: 24 | - greenfield 25 | - brownfield 26 | validations: 27 | required: true 28 | - type: input 29 | id: terraform 30 | attributes: 31 | label: Terraform Version 32 | description: Which Terraform version are you using? 33 | placeholder: Example value, 1.2.8 34 | validations: 35 | required: true 36 | - type: input 37 | id: module 38 | attributes: 39 | label: Module Version 40 | description: Which module version are you using? 41 | placeholder: Example value, 6.0.0 42 | validations: 43 | required: true 44 | - type: input 45 | id: azurerm 46 | attributes: 47 | label: AzureRM Provider Version 48 | description: Which AzureRM Provider version are you using? 49 | placeholder: Example value, 3.21.1 50 | validations: 51 | required: true 52 | - type: input 53 | id: resource 54 | attributes: 55 | label: Affected Resource(s)/Data Source(s) 56 | description: Please list the affected resources and/or data sources. 57 | placeholder: azurerm_XXXXX 58 | validations: 59 | required: true 60 | - type: textarea 61 | id: config 62 | attributes: 63 | label: Terraform Configuration Files 64 | description: | 65 | Please provide a minimal Terraform configuration that can reproduce the issue. 66 | render: hcl 67 | validations: 68 | required: true 69 | - type: textarea 70 | id: tfvars 71 | attributes: 72 | label: tfvars variables values 73 | description: | 74 | Please provide the necessary tfvars variables values to reproduce the issue. Do not share secrets or sensitive information. 75 | render: hcl 76 | validations: 77 | required: true 78 | - type: textarea 79 | id: debug 80 | attributes: 81 | label: Debug Output/Panic Output 82 | description: | 83 | For long debug logs please provide a link to a GitHub Gist containing the complete debug output. Please do NOT paste the debug output in the issue; just paste a link to the Gist. 84 | 85 | To obtain the debug output, see the [Terraform documentation on debugging](https://www.terraform.io/docs/internals/debugging.html). 86 | render: shell 87 | validations: 88 | required: true 89 | - type: textarea 90 | id: expected 91 | attributes: 92 | label: Expected Behaviour 93 | description: What should have happened? 94 | - type: textarea 95 | id: actual 96 | attributes: 97 | label: Actual Behaviour 98 | description: What actually happened? 99 | - type: textarea 100 | id: reproduce 101 | attributes: 102 | label: Steps to Reproduce 103 | description: | 104 | Please list the steps required to reproduce the issue, e.g. 105 | 106 | 1. `terraform apply` 107 | - type: input 108 | id: facts 109 | attributes: 110 | label: Important Factoids 111 | description: | 112 | Are there anything atypical about your accounts that we should know? For example: Running in a Azure China/Germany/Government? 113 | - type: textarea 114 | id: references 115 | attributes: 116 | label: References 117 | description: | 118 | Information about referencing Github Issues: https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests 119 | 120 | Are there any other GitHub issues (open or closed) or pull requests that should be linked here? Such as vendor documentation? 121 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [Unreleased](https://github.com/Azure/terraform-azurerm-network/tree/HEAD) 4 | 5 | **Merged pull requests:** 6 | 7 | - Bump github.com/Azure/terraform-module-test-helper from 0.17.0 to 0.26.0 in /test [\#150](https://github.com/Azure/terraform-azurerm-network/pull/150) ([lonegunmanb](https://github.com/lonegunmanb)) 8 | - Prepare for oidc as e2e test's authentication method [\#148](https://github.com/Azure/terraform-azurerm-network/pull/148) ([lonegunmanb](https://github.com/lonegunmanb)) 9 | - Bump github.com/Azure/terraform-module-test-helper from 0.16.0 to 0.17.0 in /test [\#135](https://github.com/Azure/terraform-azurerm-network/pull/135) ([dependabot[bot]](https://github.com/apps/dependabot)) 10 | - Bump github.com/Azure/terraform-module-test-helper from 0.14.0 to 0.16.0 in /test [\#125](https://github.com/Azure/terraform-azurerm-network/pull/125) ([dependabot[bot]](https://github.com/apps/dependabot)) 11 | 12 | ## [5.3.0](https://github.com/Azure/terraform-azurerm-network/tree/5.3.0) (2023-06-06) 13 | 14 | **Merged pull requests:** 15 | 16 | - Bump github.com/Azure/terraform-module-test-helper from 0.13.0 to 0.14.0 in /test [\#117](https://github.com/Azure/terraform-azurerm-network/pull/117) ([dependabot[bot]](https://github.com/apps/dependabot)) 17 | - Add tracing tag toggle variables [\#108](https://github.com/Azure/terraform-azurerm-network/pull/108) ([lonegunmanb](https://github.com/lonegunmanb)) 18 | - Bump github.com/Azure/terraform-module-test-helper from 0.9.1 to 0.13.0 in /test [\#106](https://github.com/Azure/terraform-azurerm-network/pull/106) ([dependabot[bot]](https://github.com/apps/dependabot)) 19 | 20 | ## [5.2.0](https://github.com/Azure/terraform-azurerm-network/tree/5.2.0) (2023-02-28) 21 | 22 | **Merged pull requests:** 23 | 24 | - Bump github.com/stretchr/testify from 1.8.1 to 1.8.2 in /test [\#99](https://github.com/Azure/terraform-azurerm-network/pull/99) ([dependabot[bot]](https://github.com/apps/dependabot)) 25 | - Bump github.com/gruntwork-io/terratest from 0.41.10 to 0.41.11 in /test [\#98](https://github.com/Azure/terraform-azurerm-network/pull/98) ([dependabot[bot]](https://github.com/apps/dependabot)) 26 | - Bump github.com/Azure/terraform-module-test-helper from 0.8.1 to 0.9.1 in /test [\#97](https://github.com/Azure/terraform-azurerm-network/pull/97) ([dependabot[bot]](https://github.com/apps/dependabot)) 27 | - Bump golang.org/x/net from 0.1.0 to 0.7.0 in /test [\#96](https://github.com/Azure/terraform-azurerm-network/pull/96) ([dependabot[bot]](https://github.com/apps/dependabot)) 28 | - Bump github.com/hashicorp/go-getter from 1.6.1 to 1.7.0 in /test [\#95](https://github.com/Azure/terraform-azurerm-network/pull/95) ([dependabot[bot]](https://github.com/apps/dependabot)) 29 | - Bump github.com/hashicorp/go-getter/v2 from 2.1.1 to 2.2.0 in /test [\#94](https://github.com/Azure/terraform-azurerm-network/pull/94) ([dependabot[bot]](https://github.com/apps/dependabot)) 30 | - Bump github.com/Azure/terraform-module-test-helper from 0.7.1 to 0.8.1 in /test [\#93](https://github.com/Azure/terraform-azurerm-network/pull/93) ([dependabot[bot]](https://github.com/apps/dependabot)) 31 | 32 | ## [5.1.0](https://github.com/Azure/terraform-azurerm-network/tree/5.1.0) (2023-01-28) 33 | 34 | **Merged pull requests:** 35 | 36 | - Bump github.com/Azure/terraform-module-test-helper from 0.6.0 to 0.7.1 in /test [\#91](https://github.com/Azure/terraform-azurerm-network/pull/91) ([dependabot[bot]](https://github.com/apps/dependabot)) 37 | - Bump github.com/gruntwork-io/terratest from 0.41.7 to 0.41.9 in /test [\#90](https://github.com/Azure/terraform-azurerm-network/pull/90) ([dependabot[bot]](https://github.com/apps/dependabot)) 38 | - Clarify Terraform 1.3 requirement \(fixes \#88\) [\#89](https://github.com/Azure/terraform-azurerm-network/pull/89) ([don-code](https://github.com/don-code)) 39 | - Bump github.com/Azure/terraform-module-test-helper from 0.4.0 to 0.6.0 in /test [\#87](https://github.com/Azure/terraform-azurerm-network/pull/87) ([dependabot[bot]](https://github.com/apps/dependabot)) 40 | - Bump github.com/gruntwork-io/terratest from 0.41.6 to 0.41.7 in /test [\#86](https://github.com/Azure/terraform-azurerm-network/pull/86) ([dependabot[bot]](https://github.com/apps/dependabot)) 41 | 42 | ## [5.0.0](https://github.com/Azure/terraform-azurerm-network/tree/5.0.0) (2022-12-13) 43 | 44 | **Merged pull requests:** 45 | 46 | - Make `var.use_for_each` required [\#85](https://github.com/Azure/terraform-azurerm-network/pull/85) ([lonegunmanb](https://github.com/lonegunmanb)) 47 | 48 | 49 | 50 | \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* 51 | -------------------------------------------------------------------------------- /test/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/Azure/terraform-azurerm-network 2 | 3 | go 1.22.0 4 | 5 | toolchain go1.22.5 6 | 7 | require ( 8 | github.com/Azure/terraform-module-test-helper v0.26.0 9 | github.com/gruntwork-io/terratest v0.47.1 10 | github.com/stretchr/testify v1.9.0 11 | ) 12 | 13 | require ( 14 | cloud.google.com/go v0.110.10 // indirect 15 | cloud.google.com/go/compute/metadata v0.3.0 // indirect 16 | cloud.google.com/go/iam v1.1.5 // indirect 17 | cloud.google.com/go/storage v1.35.1 // indirect 18 | github.com/agext/levenshtein v1.2.3 // indirect 19 | github.com/ahmetb/go-linq/v3 v3.2.0 // indirect 20 | github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect 21 | github.com/aws/aws-sdk-go v1.46.7 // indirect 22 | github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect 23 | github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect 24 | github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect 25 | github.com/davecgh/go-spew v1.1.1 // indirect 26 | github.com/emicklei/go-restful/v3 v3.9.0 // indirect 27 | github.com/go-errors/errors v1.5.1 // indirect 28 | github.com/go-logr/logr v1.2.4 // indirect 29 | github.com/go-openapi/jsonpointer v0.19.6 // indirect 30 | github.com/go-openapi/jsonreference v0.20.2 // indirect 31 | github.com/go-openapi/swag v0.22.3 // indirect 32 | github.com/go-sql-driver/mysql v1.4.1 // indirect 33 | github.com/gogo/protobuf v1.3.2 // indirect 34 | github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect 35 | github.com/golang/protobuf v1.5.3 // indirect 36 | github.com/google/gnostic-models v0.6.8 // indirect 37 | github.com/google/go-cmp v0.6.0 // indirect 38 | github.com/google/go-github/v42 v42.0.0 // indirect 39 | github.com/google/go-querystring v1.1.0 // indirect 40 | github.com/google/gofuzz v1.2.0 // indirect 41 | github.com/google/s2a-go v0.1.7 // indirect 42 | github.com/google/uuid v1.4.0 // indirect 43 | github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect 44 | github.com/googleapis/gax-go/v2 v2.12.0 // indirect 45 | github.com/gruntwork-io/go-commons v0.17.2 // indirect 46 | github.com/hashicorp/errwrap v1.0.0 // indirect 47 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 48 | github.com/hashicorp/go-getter v1.7.6 // indirect 49 | github.com/hashicorp/go-getter/v2 v2.2.3 // indirect 50 | github.com/hashicorp/go-multierror v1.1.1 // indirect 51 | github.com/hashicorp/go-safetemp v1.0.0 // indirect 52 | github.com/hashicorp/go-version v1.6.0 // indirect 53 | github.com/hashicorp/hcl v1.0.0 // indirect 54 | github.com/hashicorp/hcl/v2 v2.22.0 // indirect 55 | github.com/hashicorp/terraform-config-inspect v0.0.0-20211115214459-90acf1ca460f // indirect 56 | github.com/hashicorp/terraform-json v0.22.1 // indirect 57 | github.com/imdario/mergo v0.3.11 // indirect 58 | github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a // indirect 59 | github.com/jmespath/go-jmespath v0.4.0 // indirect 60 | github.com/josharian/intern v1.0.0 // indirect 61 | github.com/json-iterator/go v1.1.12 // indirect 62 | github.com/klauspost/compress v1.15.11 // indirect 63 | github.com/lonegunmanb/tfmodredirector v0.1.0 // indirect 64 | github.com/magodo/hclgrep v0.0.0-20220303061548-1b2b24c7caf6 // indirect 65 | github.com/mailru/easyjson v0.7.7 // indirect 66 | github.com/mattn/go-zglob v0.0.3 // indirect 67 | github.com/minamijoyo/hcledit v0.2.6 // indirect 68 | github.com/mitchellh/go-homedir v1.1.0 // indirect 69 | github.com/mitchellh/go-testing-interface v1.14.1 // indirect 70 | github.com/mitchellh/go-wordwrap v1.0.1 // indirect 71 | github.com/moby/spdystream v0.2.0 // indirect 72 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect 73 | github.com/modern-go/reflect2 v1.0.2 // indirect 74 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 75 | github.com/pmezard/go-difflib v1.0.0 // indirect 76 | github.com/pquerna/otp v1.2.0 // indirect 77 | github.com/r3labs/diff/v3 v3.0.1 // indirect 78 | github.com/russross/blackfriday/v2 v2.1.0 // indirect 79 | github.com/spf13/afero v1.11.0 // indirect 80 | github.com/spf13/pflag v1.0.5 // indirect 81 | github.com/thanhpk/randstr v1.0.6 // indirect 82 | github.com/tmccombs/hcl2json v0.3.3 // indirect 83 | github.com/ulikunitz/xz v0.5.11 // indirect 84 | github.com/urfave/cli/v2 v2.10.3 // indirect 85 | github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect 86 | github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect 87 | github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect 88 | github.com/zclconf/go-cty v1.14.4 // indirect 89 | go.opencensus.io v0.24.0 // indirect 90 | golang.org/x/crypto v0.21.0 // indirect 91 | golang.org/x/exp v0.0.0-20221106115401-f9659909a136 // indirect 92 | golang.org/x/mod v0.21.0 // indirect 93 | golang.org/x/net v0.23.0 // indirect 94 | golang.org/x/oauth2 v0.23.0 // indirect 95 | golang.org/x/sync v0.5.0 // indirect 96 | golang.org/x/sys v0.18.0 // indirect 97 | golang.org/x/term v0.18.0 // indirect 98 | golang.org/x/text v0.14.0 // indirect 99 | golang.org/x/time v0.5.0 // indirect 100 | golang.org/x/tools v0.13.0 // indirect 101 | golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect 102 | google.golang.org/api v0.152.0 // indirect 103 | google.golang.org/appengine v1.6.7 // indirect 104 | google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect 105 | google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect 106 | google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect 107 | google.golang.org/grpc v1.59.0 // indirect 108 | google.golang.org/protobuf v1.33.0 // indirect 109 | gopkg.in/inf.v0 v0.9.1 // indirect 110 | gopkg.in/yaml.v2 v2.4.0 // indirect 111 | gopkg.in/yaml.v3 v3.0.1 // indirect 112 | k8s.io/api v0.28.4 // indirect 113 | k8s.io/apimachinery v0.28.4 // indirect 114 | k8s.io/client-go v0.28.4 // indirect 115 | k8s.io/klog/v2 v2.100.1 // indirect 116 | k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect 117 | k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect 118 | sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect 119 | sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect 120 | sigs.k8s.io/yaml v1.3.0 // indirect 121 | ) 122 | -------------------------------------------------------------------------------- /CHANGELOG-v4.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [4.2.0](https://github.com/Azure/terraform-azurerm-network/tree/4.2.0) (2022-12-08) 4 | 5 | **Merged pull requests:** 6 | 7 | - Add new variable `use_for_each` so we can use `for_each` to create multiple resource instances. [\#84](https://github.com/Azure/terraform-azurerm-network/pull/84) ([lonegunmanb](https://github.com/lonegunmanb)) 8 | - Bump tflint plugin version, add new checking rule [\#83](https://github.com/Azure/terraform-azurerm-network/pull/83) ([lonegunmanb](https://github.com/lonegunmanb)) 9 | - Upgrade `terraform-module-test-helper` lib so we can get rid of override file to execute version upgrade test [\#82](https://github.com/Azure/terraform-azurerm-network/pull/82) ([lonegunmanb](https://github.com/lonegunmanb)) 10 | 11 | ## [4.1.0](https://github.com/Azure/terraform-azurerm-network/tree/4.1.0) (2022-11-24) 12 | 13 | **Merged pull requests:** 14 | 15 | - Add support for `delegation` block for `azurerm_subnet resource` [\#81](https://github.com/Azure/terraform-azurerm-network/pull/81) ([lonegunmanb](https://github.com/lonegunmanb)) 16 | - reorder variables, outputs and arguments [\#80](https://github.com/Azure/terraform-azurerm-network/pull/80) ([lonegunmanb](https://github.com/lonegunmanb)) 17 | - Replace location with local variable [\#78](https://github.com/Azure/terraform-azurerm-network/pull/78) ([jiaweitao001](https://github.com/jiaweitao001)) 18 | - Fix CI pipeline by adding missing override file, version upgrade test and correct changelog filename [\#76](https://github.com/Azure/terraform-azurerm-network/pull/76) ([lonegunmanb](https://github.com/lonegunmanb)) 19 | - Rewrite output to get rid of legacy index syntax [\#75](https://github.com/Azure/terraform-azurerm-network/pull/75) ([lonegunmanb](https://github.com/lonegunmanb)) 20 | 21 | ## [4.0.1](https://github.com/Azure/terraform-azurerm-network/tree/4.0.1) (2022-11-23) 22 | 23 | **Merged pull requests:** 24 | 25 | - Removing dependency in example [\#77](https://github.com/Azure/terraform-azurerm-network/pull/77) ([jiaweitao001](https://github.com/jiaweitao001)) 26 | - Adding Microsoft SECURITY.MD [\#69](https://github.com/Azure/terraform-azurerm-network/pull/69) ([microsoft-github-policy-service[bot]](https://github.com/apps/microsoft-github-policy-service)) 27 | 28 | ## [4.0.0](https://github.com/Azure/terraform-azurerm-network/tree/4.0.0) (2022-11-22) 29 | 30 | **Merged pull requests:** 31 | 32 | - Add CI pipeline [\#73](https://github.com/Azure/terraform-azurerm-network/pull/73) ([jiaweitao001](https://github.com/jiaweitao001)) 33 | - Add new variable `address_spaces` [\#61](https://github.com/Azure/terraform-azurerm-network/pull/61) ([yupwei68](https://github.com/yupwei68)) 34 | - ADD variable to configure service endpoints [\#60](https://github.com/Azure/terraform-azurerm-network/pull/60) ([goatwu1993](https://github.com/goatwu1993)) 35 | - adds missing words and fixes consistency [\#55](https://github.com/Azure/terraform-azurerm-network/pull/55) ([ksatirli](https://github.com/ksatirli)) 36 | - Add variable `subnet_enforce_private_link_endpoint_network_policies` [\#51](https://github.com/Azure/terraform-azurerm-network/pull/51) ([yupwei68](https://github.com/yupwei68)) 37 | - Docker fix [\#49](https://github.com/Azure/terraform-azurerm-network/pull/49) ([yupwei68](https://github.com/yupwei68)) 38 | - Integration of Terramodtest 0.8.0 [\#48](https://github.com/Azure/terraform-azurerm-network/pull/48) ([yupwei68](https://github.com/yupwei68)) 39 | - Create pull\_request\_template.md [\#47](https://github.com/Azure/terraform-azurerm-network/pull/47) ([yupwei68](https://github.com/yupwei68)) 40 | - Terraform 0.13 upgrade [\#45](https://github.com/Azure/terraform-azurerm-network/pull/45) ([yupwei68](https://github.com/yupwei68)) 41 | - Add period to vnet\_name description. [\#40](https://github.com/Azure/terraform-azurerm-network/pull/40) ([cedarkuo](https://github.com/cedarkuo)) 42 | - Replace use of deprecated attribute address\_prefix [\#39](https://github.com/Azure/terraform-azurerm-network/pull/39) ([alhails](https://github.com/alhails)) 43 | - Integration of terramodtest 0.5.0 [\#37](https://github.com/Azure/terraform-azurerm-network/pull/37) ([yupwei68](https://github.com/yupwei68)) 44 | - Remove 'azurerm\_resource\_group' & upgrade azurerm 2.0 [\#35](https://github.com/Azure/terraform-azurerm-network/pull/35) ([yupwei68](https://github.com/yupwei68)) 45 | - terraform version upgrade to v0.12 [\#33](https://github.com/Azure/terraform-azurerm-network/pull/33) ([yupwei68](https://github.com/yupwei68)) 46 | - Updated README example to supress network security ID warning [\#32](https://github.com/Azure/terraform-azurerm-network/pull/32) ([danielfears](https://github.com/danielfears)) 47 | - fix \#30 [\#31](https://github.com/Azure/terraform-azurerm-network/pull/31) ([AlexBevan](https://github.com/AlexBevan)) 48 | - Add Terratest and Revert to 2.0.0 [\#26](https://github.com/Azure/terraform-azurerm-network/pull/26) ([foreverXZC](https://github.com/foreverXZC)) 49 | - Migrating Network to use vnet module 1.0.0 and updating test. [\#21](https://github.com/Azure/terraform-azurerm-network/pull/21) ([rguthriemsft](https://github.com/rguthriemsft)) 50 | - Update the travis.yaml to build image with pre-defined environment variables. [\#20](https://github.com/Azure/terraform-azurerm-network/pull/20) ([metacpp](https://github.com/metacpp)) 51 | - Use terramodtest package to run test kitchen tasks. [\#18](https://github.com/Azure/terraform-azurerm-network/pull/18) ([metacpp](https://github.com/metacpp)) 52 | - Correction on fixtures [\#17](https://github.com/Azure/terraform-azurerm-network/pull/17) ([dcaro](https://github.com/dcaro)) 53 | - removed NSG from module and updaded README [\#16](https://github.com/Azure/terraform-azurerm-network/pull/16) ([dcaro](https://github.com/dcaro)) 54 | - Add badge service in README [\#13](https://github.com/Azure/terraform-azurerm-network/pull/13) ([metacpp](https://github.com/metacpp)) 55 | - Improve the workflow for network module. [\#12](https://github.com/Azure/terraform-azurerm-network/pull/12) ([metacpp](https://github.com/metacpp)) 56 | - Enable Rake workflow for network module [\#11](https://github.com/Azure/terraform-azurerm-network/pull/11) ([metacpp](https://github.com/metacpp)) 57 | - Kitchen test [\#9](https://github.com/Azure/terraform-azurerm-network/pull/9) ([rguthriemsft](https://github.com/rguthriemsft)) 58 | - Add Travis CI using docker [\#7](https://github.com/Azure/terraform-azurerm-network/pull/7) ([dtzar](https://github.com/dtzar)) 59 | - remove undefined dns\_servers output [\#6](https://github.com/Azure/terraform-azurerm-network/pull/6) ([ricoli](https://github.com/ricoli)) 60 | - Added vnet name as parameter [\#2](https://github.com/Azure/terraform-azurerm-network/pull/2) ([jmapro](https://github.com/jmapro)) 61 | - Changes for Terraform Module Registry formatting [\#1](https://github.com/Azure/terraform-azurerm-network/pull/1) ([cgriggs01](https://github.com/cgriggs01)) 62 | 63 | 64 | 65 | \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # terraform-azurerm-network 2 | 3 | ## Create a basic network in Azure 4 | 5 | This Terraform module deploys a Virtual Network in Azure with a subnet or a set of subnets passed in as input parameters. 6 | 7 | The module does not create nor expose a security group. You could use https://github.com/Azure/terraform-azurerm-vnet to assign network security group to the subnets. 8 | 9 | ## Notice on Upgrade to V5.x 10 | 11 | In v5.0.0, we would make `var.use_for_each` a required variable so the users must set the value explicitly. For whom are maintaining the existing infrastructure that was created with `count` should use `false`, for those who are creating a new stack, we encourage them to use `true`. 12 | 13 | V5.0.0 is a major version upgrade. Extreme caution must be taken during the upgrade to avoid resource replacement and downtime by accident. 14 | 15 | Running the `terraform plan` first to inspect the plan is strongly advised. 16 | 17 | ## Notice on Upgrade to V4.x 18 | 19 | We've added a CI pipeline for this module to speed up our code review and to enforce a high code quality standard, if you want to contribute by submitting a pull request, please read [Pre-Commit & Pr-Check & Test](#Pre-Commit--Pr-Check--Test) section, or your pull request might be rejected by CI pipeline. 20 | 21 | A pull request will be reviewed when it has passed Pre Pull Request Check in the pipeline, and will be merged when it has passed the acceptance tests. Once the ci Pipeline failed, please read the pipeline's output, thanks for your cooperation. 22 | 23 | V4.0.0 is a major version upgrade. Extreme caution must be taken during the upgrade to avoid resource replacement and downtime by accident. 24 | 25 | Running the `terraform plan` first to inspect the plan is strongly advised. 26 | 27 | ## Usage 28 | 29 | ```hcl 30 | provider "azurerm" { 31 | features {} 32 | } 33 | 34 | resource "azurerm_resource_group" "example" { 35 | name = "my-resources" 36 | location = "West Europe" 37 | } 38 | 39 | module "network" { 40 | source = "Azure/network/azurerm" 41 | resource_group_name = azurerm_resource_group.example.name 42 | address_spaces = ["10.0.0.0/16", "10.2.0.0/16"] 43 | subnet_prefixes = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] 44 | subnet_names = ["subnet1", "subnet2", "subnet3"] 45 | 46 | subnet_service_endpoints = { 47 | "subnet1" : ["Microsoft.Sql"], 48 | "subnet2" : ["Microsoft.Sql"], 49 | "subnet3" : ["Microsoft.Sql"] 50 | } 51 | use_for_each = true 52 | tags = { 53 | environment = "dev" 54 | costcenter = "it" 55 | } 56 | 57 | depends_on = [azurerm_resource_group.example] 58 | } 59 | ``` 60 | 61 | ## Enable or disable tracing tags 62 | 63 | We're using [BridgeCrew Yor](https://github.com/bridgecrewio/yor) and [yorbox](https://github.com/lonegunmanb/yorbox) to help manage tags consistently across infrastructure as code (IaC) frameworks. In this module you might see tags like: 64 | 65 | ```hcl 66 | resource "azurerm_resource_group" "rg" { 67 | location = "eastus" 68 | name = random_pet.name 69 | tags = merge(var.tags, (/**/ (var.tracing_tags_enabled ? { for k, v in /**/ { 70 | avm_git_commit = "3077cc6d0b70e29b6e106b3ab98cee6740c916f6" 71 | avm_git_file = "main.tf" 72 | avm_git_last_modified_at = "2023-05-05 08:57:54" 73 | avm_git_org = "lonegunmanb" 74 | avm_git_repo = "terraform-yor-tag-test-module" 75 | avm_yor_trace = "a0425718-c57d-401c-a7d5-f3d88b2551a4" 76 | } /**/ : replace(k, "avm_", var.tracing_tags_prefix) => v } : {}) /**/)) 77 | } 78 | ``` 79 | 80 | To enable tracing tags, set the variable to true: 81 | 82 | ```hcl 83 | module "example" { 84 | source = 85 | ... 86 | tracing_tags_enabled = true 87 | } 88 | ``` 89 | 90 | The `tracing_tags_enabled` is default to `false`. 91 | 92 | To customize the prefix for your tracing tags, set the `tracing_tags_prefix` variable value in your Terraform configuration: 93 | 94 | ```hcl 95 | module "example" { 96 | source = 97 | ... 98 | tracing_tags_prefix = "custom_prefix_" 99 | } 100 | ``` 101 | 102 | The actual applied tags would be: 103 | 104 | ```text 105 | { 106 | custom_prefix_git_commit = "3077cc6d0b70e29b6e106b3ab98cee6740c916f6" 107 | custom_prefix_git_file = "main.tf" 108 | custom_prefix_git_last_modified_at = "2023-05-05 08:57:54" 109 | custom_prefix_git_org = "lonegunmanb" 110 | custom_prefix_git_repo = "terraform-yor-tag-test-module" 111 | custom_prefix_yor_trace = "a0425718-c57d-401c-a7d5-f3d88b2551a4" 112 | } 113 | ``` 114 | 115 | ## Notice to contributor 116 | 117 | Thanks for your contribution! This module was created before Terraform introduce `for_each`, and according to the [document](https://developer.hashicorp.com/terraform/language/meta-arguments/count#when-to-use-for_each-instead-of-count): 118 | 119 | >If your instances are almost identical, `count` is appropriate. If some of their arguments need distinct values that can't be directly derived from an integer, it's safer to use `for_each`. 120 | 121 | This module contains resources with `count` meta-argument, but if we change `count` to `for_each` directly, it would require heavily manually state move operations with extremely caution, or the users who are maintaining existing infrastructure would face potential breaking change. 122 | 123 | This module replicated a new `azurerm_subnet` which used `for_each`, and we provide a new toggle variable named `use_for_each`, this toggle is a switcher between `count` set and `for_each` set. Now user can set `var.use_for_each` to `true` to use `for_each`, and users who're maintaining existing resources could keep this toggle `false` to avoid potential breaking change. If you'd like to make changes to subnet resource, make sure that you've change both `resource` blocks. Thanks for your cooperation. 124 | 125 | ## Pre-Commit & Pr-Check & Test 126 | 127 | ### Configurations 128 | 129 | - [Configure Terraform for Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/terraform-install-configure) 130 | 131 | We assumed that you have setup service principal's credentials in your environment variables like below: 132 | 133 | ```shell 134 | export ARM_SUBSCRIPTION_ID="" 135 | export ARM_TENANT_ID="" 136 | export ARM_CLIENT_ID="" 137 | export ARM_CLIENT_SECRET="" 138 | ``` 139 | 140 | On Windows Powershell: 141 | 142 | ```shell 143 | $env:ARM_SUBSCRIPTION_ID="" 144 | $env:ARM_TENANT_ID="" 145 | $env:ARM_CLIENT_ID="" 146 | $env:ARM_CLIENT_SECRET="" 147 | ``` 148 | 149 | We provide a docker image to run the pre-commit checks and tests for you: `mcr.microsoft.com/azterraform:latest` 150 | 151 | To run the pre-commit task, we can run the following command: 152 | 153 | ```shell 154 | $ docker run --rm -v $(pwd):/src -w /src mcr.microsoft.com/azterraform:latest make pre-commit 155 | ``` 156 | 157 | On Windows Powershell: 158 | 159 | ```shell 160 | $ docker run --rm -v ${pwd}:/src -w /src mcr.microsoft.com/azterraform:latest make pre-commit 161 | ``` 162 | 163 | In pre-commit task, we will: 164 | 165 | 1. Run `terraform fmt -recursive` command for your Terraform code. 166 | 2. Run `terrafmt fmt -f` command for markdown files and go code files to ensure that the Terraform code embedded in these files are well formatted. 167 | 3. Run `go mod tidy` and `go mod vendor` for test folder to ensure that all the dependencies have been synced. 168 | 4. Run `gofmt` for all go code files. 169 | 5. Run `gofumpt` for all go code files. 170 | 6. Run `terraform-docs` on `README.md` file, then run `markdown-table-formatter` to format markdown tables in `README.md`. 171 | 172 | Then we can run the pr-check task to check whether our code meets our pipeline's requirement(We strongly recommend you run the following command before you commit): 173 | 174 | ```shell 175 | $ docker run --rm -v $(pwd):/src -w /src -e TFLINT_CONFIG=.tflint_alt.hcl mcr.microsoft.com/azterraform:latest make pr-check 176 | ``` 177 | 178 | On Windows Powershell: 179 | 180 | ```shell 181 | $ docker run --rm -v ${pwd}:/src -w /src -e TFLINT_CONFIG=.tflint_alt.hcl mcr.microsoft.com/azterraform:latest make pr-check 182 | ``` 183 | 184 | To run the e2e-test, we can run the following command: 185 | 186 | ```text 187 | docker run --rm -v $(pwd):/src -w /src -e ARM_SUBSCRIPTION_ID -e ARM_TENANT_ID -e ARM_CLIENT_ID -e ARM_CLIENT_SECRET mcr.microsoft.com/azterraform:latest make e2e-test 188 | ``` 189 | 190 | On Windows Powershell: 191 | 192 | ```text 193 | docker run --rm -v ${pwd}:/src -w /src -e ARM_SUBSCRIPTION_ID -e ARM_TENANT_ID -e ARM_CLIENT_ID -e ARM_CLIENT_SECRET mcr.microsoft.com/azterraform:latest make e2e-test 194 | ``` 195 | 196 | ## Prerequisites 197 | 198 | - [Docker](https://www.docker.com/community-edition#/download) 199 | 200 | ## Authors 201 | 202 | Originally created by [Eugene Chuvyrov](http://github.com/echuvyrov) 203 | 204 | ## License 205 | 206 | [MIT](LICENSE) 207 | 208 | 209 | ## Requirements 210 | 211 | | Name | Version | 212 | |------|---------| 213 | | [terraform](#requirement\_terraform) | >= 1.3 | 214 | | [azurerm](#requirement\_azurerm) | >= 3.0, < 4.0 | 215 | 216 | ## Providers 217 | 218 | | Name | Version | 219 | |------|---------| 220 | | [azurerm](#provider\_azurerm) | >= 3.0, < 4.0 | 221 | 222 | ## Modules 223 | 224 | No modules. 225 | 226 | ## Resources 227 | 228 | | Name | Type | 229 | |------|------| 230 | | [azurerm_subnet.subnet_count](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet) | resource | 231 | | [azurerm_subnet.subnet_for_each](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet) | resource | 232 | | [azurerm_virtual_network.vnet](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/virtual_network) | resource | 233 | | [azurerm_resource_group.network](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/resource_group) | data source | 234 | 235 | ## Inputs 236 | 237 | | Name | Description | Type | Default | Required | 238 | |------|-------------|------|---------|:--------:| 239 | | [address\_space](#input\_address\_space) | The address space that is used by the virtual network. | `string` | `"10.0.0.0/16"` | no | 240 | | [address\_spaces](#input\_address\_spaces) | The list of the address spaces that is used by the virtual network. | `list(string)` | `[]` | no | 241 | | [dns\_servers](#input\_dns\_servers) | The DNS servers to be used with vNet. | `list(string)` | `[]` | no | 242 | | [resource\_group\_location](#input\_resource\_group\_location) | The location/region where the virtual network is created. Changing this forces a new resource to be created. | `string` | `null` | no | 243 | | [resource\_group\_name](#input\_resource\_group\_name) | The name of an existing resource group to be imported. | `string` | n/a | yes | 244 | | [subnet\_delegation](#input\_subnet\_delegation) | `service_delegation` blocks for `azurerm_subnet` resource, subnet names as keys, list of delegation blocks as value, more details about delegation block could be found at the [document](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet#delegation). |
map(list(object({
name = string
service_delegation = object({
name = string
actions = optional(list(string))
})
})))
| `{}` | no | 245 | | [subnet\_enforce\_private\_link\_endpoint\_network\_policies](#input\_subnet\_enforce\_private\_link\_endpoint\_network\_policies) | A map with key (string) `subnet name`, value (bool) `true` or `false` to indicate enable or disable network policies for the private link endpoint on the subnet. Default value is false. | `map(bool)` | `{}` | no | 246 | | [subnet\_names](#input\_subnet\_names) | A list of public subnets inside the vNet. | `list(string)` |
[
"subnet1"
]
| no | 247 | | [subnet\_prefixes](#input\_subnet\_prefixes) | The address prefix to use for the subnet. | `list(string)` |
[
"10.0.1.0/24"
]
| no | 248 | | [subnet\_service\_endpoints](#input\_subnet\_service\_endpoints) | A map with key (string) `subnet name`, value (list(string)) to indicate enabled service endpoints on the subnet. Default value is []. | `map(list(string))` | `{}` | no | 249 | | [tags](#input\_tags) | The tags to associate with your network and subnets. | `map(string)` |
{
"environment": "dev"
}
| no | 250 | | [tracing\_tags\_enabled](#input\_tracing\_tags\_enabled) | Whether enable tracing tags that generated by BridgeCrew Yor. | `bool` | `false` | no | 251 | | [tracing\_tags\_prefix](#input\_tracing\_tags\_prefix) | Default prefix for generated tracing tags | `string` | `"avm_"` | no | 252 | | [use\_for\_each](#input\_use\_for\_each) | Use `for_each` instead of `count` to create multiple resource instances. | `bool` | n/a | yes | 253 | | [vnet\_name](#input\_vnet\_name) | Name of the vnet to create. | `string` | `"acctvnet"` | no | 254 | 255 | ## Outputs 256 | 257 | | Name | Description | 258 | |------|-------------| 259 | | [vnet\_address\_space](#output\_vnet\_address\_space) | The address space of the newly created vNet | 260 | | [vnet\_id](#output\_vnet\_id) | The id of the newly created vNet | 261 | | [vnet\_location](#output\_vnet\_location) | The location of the newly created vNet | 262 | | [vnet\_name](#output\_vnet\_name) | The name of the newly created vNet | 263 | | [vnet\_subnets](#output\_vnet\_subnets) | The ids of subnets created inside the newly created vNet | 264 | 265 | -------------------------------------------------------------------------------- /examples/startup/TestRecord.md: -------------------------------------------------------------------------------- 1 | ## 28 Jan 24 00:20 UTC 2 | 3 | Success: true 4 | 5 | ### Versions 6 | 7 | Terraform v1.6.5 8 | on linux_amd64 9 | + provider registry.terraform.io/hashicorp/azurerm v3.89.0 10 | + provider registry.terraform.io/hashicorp/random v3.6.0 11 | 12 | ### Error 13 | 14 | 15 | 16 | --- 17 | 18 | ## 21 Jan 24 00:25 UTC 19 | 20 | Success: true 21 | 22 | ### Versions 23 | 24 | Terraform v1.6.5 25 | on linux_amd64 26 | + provider registry.terraform.io/hashicorp/azurerm v3.88.0 27 | + provider registry.terraform.io/hashicorp/random v3.6.0 28 | 29 | ### Error 30 | 31 | 32 | 33 | --- 34 | 35 | ## 14 Jan 24 00:20 UTC 36 | 37 | Success: true 38 | 39 | ### Versions 40 | 41 | Terraform v1.6.4 42 | on linux_amd64 43 | + provider registry.terraform.io/hashicorp/azurerm v3.87.0 44 | + provider registry.terraform.io/hashicorp/random v3.6.0 45 | 46 | ### Error 47 | 48 | 49 | 50 | --- 51 | 52 | ## 07 Jan 24 00:20 UTC 53 | 54 | Success: true 55 | 56 | ### Versions 57 | 58 | Terraform v1.6.3 59 | on linux_amd64 60 | + provider registry.terraform.io/hashicorp/azurerm v3.86.0 61 | + provider registry.terraform.io/hashicorp/random v3.6.0 62 | 63 | ### Error 64 | 65 | 66 | 67 | --- 68 | 69 | ## 31 Dec 23 00:19 UTC 70 | 71 | Success: true 72 | 73 | ### Versions 74 | 75 | Terraform v1.6.3 76 | on linux_amd64 77 | + provider registry.terraform.io/hashicorp/azurerm v3.85.0 78 | + provider registry.terraform.io/hashicorp/random v3.6.0 79 | 80 | ### Error 81 | 82 | 83 | 84 | --- 85 | 86 | ## 24 Dec 23 00:19 UTC 87 | 88 | Success: true 89 | 90 | ### Versions 91 | 92 | Terraform v1.6.3 93 | on linux_amd64 94 | + provider registry.terraform.io/hashicorp/azurerm v3.85.0 95 | + provider registry.terraform.io/hashicorp/random v3.6.0 96 | 97 | ### Error 98 | 99 | 100 | 101 | --- 102 | 103 | ## 17 Dec 23 00:21 UTC 104 | 105 | Success: true 106 | 107 | ### Versions 108 | 109 | Terraform v1.6.3 110 | on linux_amd64 111 | + provider registry.terraform.io/hashicorp/azurerm v3.85.0 112 | + provider registry.terraform.io/hashicorp/random v3.6.0 113 | 114 | ### Error 115 | 116 | 117 | 118 | --- 119 | 120 | ## 10 Dec 23 00:21 UTC 121 | 122 | Success: true 123 | 124 | ### Versions 125 | 126 | Terraform v1.6.2 127 | on linux_amd64 128 | + provider registry.terraform.io/hashicorp/azurerm v3.84.0 129 | + provider registry.terraform.io/hashicorp/random v3.6.0 130 | 131 | ### Error 132 | 133 | 134 | 135 | --- 136 | 137 | ## 03 Dec 23 00:20 UTC 138 | 139 | Success: true 140 | 141 | ### Versions 142 | 143 | Terraform v1.6.2 144 | on linux_amd64 145 | + provider registry.terraform.io/hashicorp/azurerm v3.83.0 146 | + provider registry.terraform.io/hashicorp/random v3.5.1 147 | 148 | ### Error 149 | 150 | 151 | 152 | --- 153 | 154 | ## 26 Nov 23 00:20 UTC 155 | 156 | Success: true 157 | 158 | ### Versions 159 | 160 | Terraform v1.6.2 161 | on linux_amd64 162 | + provider registry.terraform.io/hashicorp/azurerm v3.82.0 163 | + provider registry.terraform.io/hashicorp/random v3.5.1 164 | 165 | ### Error 166 | 167 | 168 | 169 | --- 170 | 171 | ## 21 Nov 23 05:53 UTC 172 | 173 | Success: true 174 | 175 | ### Versions 176 | 177 | Terraform v1.6.2 178 | on linux_amd64 179 | + provider registry.terraform.io/hashicorp/azurerm v3.81.0 180 | + provider registry.terraform.io/hashicorp/random v3.5.1 181 | 182 | ### Error 183 | 184 | 185 | 186 | --- 187 | 188 | ## 19 Nov 23 00:20 UTC 189 | 190 | Success: true 191 | 192 | ### Versions 193 | 194 | Terraform v1.6.2 195 | on linux_amd64 196 | + provider registry.terraform.io/hashicorp/azurerm v3.81.0 197 | + provider registry.terraform.io/hashicorp/random v3.5.1 198 | 199 | ### Error 200 | 201 | 202 | 203 | --- 204 | 205 | ## 12 Nov 23 00:19 UTC 206 | 207 | Success: true 208 | 209 | ### Versions 210 | 211 | Terraform v1.6.0 212 | on linux_amd64 213 | + provider registry.terraform.io/hashicorp/azurerm v3.80.0 214 | + provider registry.terraform.io/hashicorp/random v3.5.1 215 | 216 | ### Error 217 | 218 | 219 | 220 | --- 221 | 222 | ## 05 Nov 23 00:19 UTC 223 | 224 | Success: true 225 | 226 | ### Versions 227 | 228 | Terraform v1.6.0 229 | on linux_amd64 230 | + provider registry.terraform.io/hashicorp/azurerm v3.79.0 231 | + provider registry.terraform.io/hashicorp/random v3.5.1 232 | 233 | ### Error 234 | 235 | 236 | 237 | --- 238 | 239 | ## 29 Oct 23 00:19 UTC 240 | 241 | Success: true 242 | 243 | ### Versions 244 | 245 | Terraform v1.6.0 246 | on linux_amd64 247 | + provider registry.terraform.io/hashicorp/azurerm v3.78.0 248 | + provider registry.terraform.io/hashicorp/random v3.5.1 249 | 250 | ### Error 251 | 252 | 253 | 254 | --- 255 | 256 | ## 22 Oct 23 00:18 UTC 257 | 258 | Success: true 259 | 260 | ### Versions 261 | 262 | Terraform v1.5.7 263 | on linux_amd64 264 | + provider registry.terraform.io/hashicorp/azurerm v3.77.0 265 | + provider registry.terraform.io/hashicorp/random v3.5.1 266 | 267 | ### Error 268 | 269 | 270 | 271 | --- 272 | 273 | ## 15 Oct 23 00:21 UTC 274 | 275 | Success: true 276 | 277 | ### Versions 278 | 279 | Terraform v1.5.7 280 | on linux_amd64 281 | + provider registry.terraform.io/hashicorp/azurerm v3.76.0 282 | + provider registry.terraform.io/hashicorp/random v3.5.1 283 | 284 | ### Error 285 | 286 | 287 | 288 | --- 289 | 290 | ## 08 Oct 23 00:19 UTC 291 | 292 | Success: true 293 | 294 | ### Versions 295 | 296 | Terraform v1.5.6 297 | on linux_amd64 298 | + provider registry.terraform.io/hashicorp/azurerm v3.75.0 299 | + provider registry.terraform.io/hashicorp/random v3.5.1 300 | 301 | ### Error 302 | 303 | 304 | 305 | --- 306 | 307 | ## 01 Oct 23 00:20 UTC 308 | 309 | Success: true 310 | 311 | ### Versions 312 | 313 | Terraform v1.5.6 314 | on linux_amd64 315 | + provider registry.terraform.io/hashicorp/azurerm v3.75.0 316 | + provider registry.terraform.io/hashicorp/random v3.5.1 317 | 318 | ### Error 319 | 320 | 321 | 322 | --- 323 | 324 | ## 24 Sep 23 00:20 UTC 325 | 326 | Success: true 327 | 328 | ### Versions 329 | 330 | Terraform v1.5.6 331 | on linux_amd64 332 | + provider registry.terraform.io/hashicorp/azurerm v3.74.0 333 | + provider registry.terraform.io/hashicorp/random v3.5.1 334 | 335 | ### Error 336 | 337 | 338 | 339 | --- 340 | 341 | ## 17 Sep 23 00:12 UTC 342 | 343 | Success: true 344 | 345 | ### Versions 346 | 347 | Terraform v1.5.5 348 | on linux_amd64 349 | + provider registry.terraform.io/hashicorp/azurerm v3.73.0 350 | + provider registry.terraform.io/hashicorp/random v3.5.1 351 | 352 | ### Error 353 | 354 | 355 | 356 | --- 357 | 358 | ## 07 Aug 23 02:18 UTC 359 | 360 | Success: true 361 | 362 | ### Versions 363 | 364 | Terraform v1.5.1 365 | on linux_amd64 366 | + provider registry.terraform.io/hashicorp/azurerm v3.68.0 367 | + provider registry.terraform.io/hashicorp/random v3.5.1 368 | 369 | ### Error 370 | 371 | 372 | 373 | --- 374 | 375 | ## 10 Sep 23 00:19 UTC 376 | 377 | Success: true 378 | 379 | ### Versions 380 | 381 | Terraform v1.5.4 382 | on linux_amd64 383 | + provider registry.terraform.io/hashicorp/azurerm v3.72.0 384 | + provider registry.terraform.io/hashicorp/random v3.5.1 385 | 386 | ### Error 387 | 388 | 389 | 390 | --- 391 | 392 | ## 03 Sep 23 00:19 UTC 393 | 394 | Success: true 395 | 396 | ### Versions 397 | 398 | Terraform v1.5.4 399 | on linux_amd64 400 | + provider registry.terraform.io/hashicorp/azurerm v3.71.0 401 | + provider registry.terraform.io/hashicorp/random v3.5.1 402 | 403 | ### Error 404 | 405 | 406 | 407 | --- 408 | 409 | ## 27 Aug 23 00:18 UTC 410 | 411 | Success: true 412 | 413 | ### Versions 414 | 415 | Terraform v1.5.4 416 | on linux_amd64 417 | + provider registry.terraform.io/hashicorp/azurerm v3.71.0 418 | + provider registry.terraform.io/hashicorp/random v3.5.1 419 | 420 | ### Error 421 | 422 | 423 | 424 | --- 425 | 426 | ## 20 Aug 23 00:19 UTC 427 | 428 | Success: true 429 | 430 | ### Versions 431 | 432 | Terraform v1.5.3 433 | on linux_amd64 434 | + provider registry.terraform.io/hashicorp/azurerm v3.70.0 435 | + provider registry.terraform.io/hashicorp/random v3.5.1 436 | 437 | ### Error 438 | 439 | 440 | 441 | --- 442 | 443 | ## 13 Aug 23 00:18 UTC 444 | 445 | Success: true 446 | 447 | ### Versions 448 | 449 | Terraform v1.5.2 450 | on linux_amd64 451 | + provider registry.terraform.io/hashicorp/azurerm v3.69.0 452 | + provider registry.terraform.io/hashicorp/random v3.5.1 453 | 454 | ### Error 455 | 456 | 457 | 458 | --- 459 | 460 | ## 06 Aug 23 00:18 UTC 461 | 462 | Success: true 463 | 464 | ### Versions 465 | 466 | Terraform v1.5.1 467 | on linux_amd64 468 | + provider registry.terraform.io/hashicorp/azurerm v3.68.0 469 | + provider registry.terraform.io/hashicorp/random v3.5.1 470 | 471 | ### Error 472 | 473 | 474 | 475 | --- 476 | 477 | ## 30 Jul 23 00:18 UTC 478 | 479 | Success: true 480 | 481 | ### Versions 482 | 483 | Terraform v1.5.1 484 | on linux_amd64 485 | + provider registry.terraform.io/hashicorp/azurerm v3.67.0 486 | + provider registry.terraform.io/hashicorp/random v3.5.1 487 | 488 | ### Error 489 | 490 | 491 | 492 | --- 493 | 494 | ## 23 Jul 23 00:18 UTC 495 | 496 | Success: true 497 | 498 | ### Versions 499 | 500 | Terraform v1.5.0 501 | on linux_amd64 502 | + provider registry.terraform.io/hashicorp/azurerm v3.66.0 503 | + provider registry.terraform.io/hashicorp/random v3.5.1 504 | 505 | ### Error 506 | 507 | 508 | 509 | --- 510 | 511 | ## 16 Jul 23 00:19 UTC 512 | 513 | Success: true 514 | 515 | ### Versions 516 | 517 | Terraform v1.5.0 518 | on linux_amd64 519 | + provider registry.terraform.io/hashicorp/azurerm v3.65.0 520 | + provider registry.terraform.io/hashicorp/random v3.5.1 521 | 522 | ### Error 523 | 524 | 525 | 526 | --- 527 | 528 | ## 09 Jul 23 00:18 UTC 529 | 530 | Success: true 531 | 532 | ### Versions 533 | 534 | Terraform v1.5.0 535 | on linux_amd64 536 | + provider registry.terraform.io/hashicorp/azurerm v3.64.0 537 | + provider registry.terraform.io/hashicorp/random v3.5.1 538 | 539 | ### Error 540 | 541 | 542 | 543 | --- 544 | 545 | ## 25 Jun 23 00:20 UTC 546 | 547 | Success: true 548 | 549 | ### Versions 550 | 551 | Terraform v1.5.0 552 | on linux_amd64 553 | + provider registry.terraform.io/hashicorp/azurerm v3.62.1 554 | + provider registry.terraform.io/hashicorp/random v3.5.1 555 | 556 | ### Error 557 | 558 | 559 | 560 | --- 561 | 562 | ## 18 Jun 23 00:19 UTC 563 | 564 | Success: true 565 | 566 | ### Versions 567 | 568 | Terraform v1.4.6 569 | on linux_amd64 570 | + provider registry.terraform.io/hashicorp/azurerm v3.61.0 571 | + provider registry.terraform.io/hashicorp/random v3.5.1 572 | 573 | ### Error 574 | 575 | 576 | 577 | --- 578 | 579 | ## 11 Jun 23 00:19 UTC 580 | 581 | Success: true 582 | 583 | ### Versions 584 | 585 | Terraform v1.4.6 586 | on linux_amd64 587 | + provider registry.terraform.io/hashicorp/azurerm v3.60.0 588 | + provider registry.terraform.io/hashicorp/random v3.5.1 589 | 590 | ### Error 591 | 592 | 593 | 594 | --- 595 | 596 | ## 06 Jun 23 08:33 UTC 597 | 598 | Success: true 599 | 600 | ### Versions 601 | 602 | Terraform v1.4.6 603 | on linux_amd64 604 | + provider registry.terraform.io/hashicorp/azurerm v3.59.0 605 | + provider registry.terraform.io/hashicorp/random v3.5.1 606 | 607 | ### Error 608 | 609 | 610 | 611 | --- 612 | 613 | ## 06 Jun 23 08:33 UTC 614 | 615 | Success: true 616 | 617 | ### Versions 618 | 619 | Terraform v1.4.6 620 | on linux_amd64 621 | + provider registry.terraform.io/hashicorp/azurerm v3.59.0 622 | + provider registry.terraform.io/hashicorp/random v3.5.1 623 | 624 | ### Error 625 | 626 | 627 | 628 | --- 629 | 630 | ## 04 Jun 23 00:19 UTC 631 | 632 | Success: true 633 | 634 | ### Versions 635 | 636 | Terraform v1.4.6 637 | on linux_amd64 638 | + provider registry.terraform.io/hashicorp/azurerm v3.59.0 639 | + provider registry.terraform.io/hashicorp/random v3.5.1 640 | 641 | ### Error 642 | 643 | 644 | 645 | --- 646 | 647 | ## 28 May 23 00:19 UTC 648 | 649 | Success: true 650 | 651 | ### Versions 652 | 653 | Terraform v1.4.5 654 | on linux_amd64 655 | + provider registry.terraform.io/hashicorp/azurerm v3.58.0 656 | + provider registry.terraform.io/hashicorp/random v3.5.1 657 | 658 | ### Error 659 | 660 | 661 | 662 | --- 663 | 664 | ## 21 May 23 00:19 UTC 665 | 666 | Success: true 667 | 668 | ### Versions 669 | 670 | Terraform v1.4.5 671 | on linux_amd64 672 | + provider registry.terraform.io/hashicorp/azurerm v3.57.0 673 | + provider registry.terraform.io/hashicorp/random v3.5.1 674 | 675 | ### Error 676 | 677 | 678 | 679 | --- 680 | 681 | ## 14 May 23 00:18 UTC 682 | 683 | Success: true 684 | 685 | ### Versions 686 | 687 | Terraform v1.4.5 688 | on linux_amd64 689 | + provider registry.terraform.io/hashicorp/azurerm v3.56.0 690 | + provider registry.terraform.io/hashicorp/random v3.5.1 691 | 692 | ### Error 693 | 694 | 695 | 696 | --- 697 | 698 | ## 08 May 23 06:39 UTC 699 | 700 | Success: true 701 | 702 | ### Versions 703 | 704 | Terraform v1.4.5 705 | on linux_amd64 706 | + provider registry.terraform.io/hashicorp/azurerm v3.55.0 707 | + provider registry.terraform.io/hashicorp/random v3.5.1 708 | 709 | ### Error 710 | 711 | 712 | 713 | --- 714 | 715 | ## 07 May 23 00:18 UTC 716 | 717 | Success: true 718 | 719 | ### Versions 720 | 721 | Terraform v1.4.5 722 | on linux_amd64 723 | + provider registry.terraform.io/hashicorp/azurerm v3.55.0 724 | + provider registry.terraform.io/hashicorp/random v3.5.1 725 | 726 | ### Error 727 | 728 | 729 | 730 | --- 731 | 732 | ## 30 Apr 23 00:18 UTC 733 | 734 | Success: true 735 | 736 | ### Versions 737 | 738 | Terraform v1.4.5 739 | on linux_amd64 740 | + provider registry.terraform.io/hashicorp/azurerm v3.54.0 741 | + provider registry.terraform.io/hashicorp/random v3.5.1 742 | 743 | ### Error 744 | 745 | 746 | 747 | --- 748 | 749 | ## 23 Apr 23 00:18 UTC 750 | 751 | Success: true 752 | 753 | ### Versions 754 | 755 | Terraform v1.4.4 756 | on linux_amd64 757 | + provider registry.terraform.io/hashicorp/azurerm v3.53.0 758 | + provider registry.terraform.io/hashicorp/random v3.5.1 759 | 760 | ### Error 761 | 762 | 763 | 764 | --- 765 | 766 | ## 18 Apr 23 01:28 UTC 767 | 768 | Success: true 769 | 770 | ### Versions 771 | 772 | Terraform v1.4.3 773 | on linux_amd64 774 | + provider registry.terraform.io/hashicorp/azurerm v3.52.0 775 | + provider registry.terraform.io/hashicorp/random v3.5.1 776 | 777 | ### Error 778 | 779 | 780 | 781 | --- 782 | 783 | ## 16 Apr 23 00:19 UTC 784 | 785 | Success: true 786 | 787 | ### Versions 788 | 789 | Terraform v1.4.3 790 | on linux_amd64 791 | + provider registry.terraform.io/hashicorp/azurerm v3.52.0 792 | + provider registry.terraform.io/hashicorp/random v3.5.1 793 | 794 | ### Error 795 | 796 | 797 | 798 | --- 799 | 800 | ## 09 Apr 23 00:17 UTC 801 | 802 | Success: true 803 | 804 | ### Versions 805 | 806 | Terraform v1.4.2 807 | on linux_amd64 808 | + provider registry.terraform.io/hashicorp/azurerm v3.51.0 809 | + provider registry.terraform.io/hashicorp/random v3.4.3 810 | 811 | ### Error 812 | 813 | 814 | 815 | --- 816 | 817 | ## 02 Apr 23 00:19 UTC 818 | 819 | Success: true 820 | 821 | ### Versions 822 | 823 | Terraform v1.4.1 824 | on linux_amd64 825 | + provider registry.terraform.io/hashicorp/azurerm v3.50.0 826 | + provider registry.terraform.io/hashicorp/random v3.4.3 827 | 828 | ### Error 829 | 830 | 831 | 832 | --- 833 | 834 | ## 26 Mar 23 00:19 UTC 835 | 836 | Success: true 837 | 838 | ### Versions 839 | 840 | Terraform v1.4.1 841 | on linux_amd64 842 | + provider registry.terraform.io/hashicorp/azurerm v3.49.0 843 | + provider registry.terraform.io/hashicorp/random v3.4.3 844 | 845 | ### Error 846 | 847 | 848 | 849 | --- 850 | 851 | ## 20 Mar 23 09:31 UTC 852 | 853 | Success: true 854 | 855 | ### Versions 856 | 857 | Terraform v1.4.0 858 | on linux_amd64 859 | + provider registry.terraform.io/hashicorp/azurerm v3.48.0 860 | + provider registry.terraform.io/hashicorp/random v3.4.3 861 | 862 | ### Error 863 | 864 | 865 | 866 | --- 867 | 868 | ## 28 Feb 23 01:30 UTC 869 | 870 | Success: true 871 | 872 | ### Versions 873 | 874 | Terraform v1.3.8 875 | on linux_amd64 876 | + provider registry.terraform.io/hashicorp/azurerm v3.45.0 877 | + provider registry.terraform.io/hashicorp/random v3.4.3 878 | 879 | ### Error 880 | 881 | 882 | 883 | --- 884 | 885 | ## 27 Feb 23 04:44 UTC 886 | 887 | Success: true 888 | 889 | ### Versions 890 | 891 | Terraform v1.3.8 892 | on linux_amd64 893 | + provider registry.terraform.io/hashicorp/azurerm v3.45.0 894 | + provider registry.terraform.io/hashicorp/random v3.4.3 895 | 896 | ### Error 897 | 898 | 899 | 900 | --- 901 | 902 | ## 22 Feb 23 14:18 UTC 903 | 904 | Success: true 905 | 906 | ### Versions 907 | 908 | Terraform v1.3.7 909 | on linux_amd64 910 | + provider registry.terraform.io/hashicorp/azurerm v3.44.1 911 | + provider registry.terraform.io/hashicorp/random v3.4.3 912 | 913 | ### Error 914 | 915 | 916 | 917 | --- 918 | 919 | ## 18 Feb 23 11:09 UTC 920 | 921 | Success: true 922 | 923 | ### Versions 924 | 925 | Terraform v1.3.7 926 | on linux_amd64 927 | + provider registry.terraform.io/hashicorp/azurerm v3.44.1 928 | + provider registry.terraform.io/hashicorp/random v3.4.3 929 | 930 | ### Error 931 | 932 | 933 | 934 | --- 935 | 936 | --------------------------------------------------------------------------------