From 0e669e82eca6cc41e3b964491b3b6e51e06aded8 Mon Sep 17 00:00:00 2001 From: Michael Bender Date: Tue, 16 May 2023 21:33:19 -0500 Subject: [PATCH 1/6] updates --- .../101-full/main.tf | 180 +++++++++++++++ .../101-full/qs-avnm-terraform.md | 214 ++++++++++++++++++ 2 files changed, 394 insertions(+) create mode 100644 quickstart/101-virtual-network-manager-create/101-full/main.tf create mode 100644 quickstart/101-virtual-network-manager-create/101-full/qs-avnm-terraform.md diff --git a/quickstart/101-virtual-network-manager-create/101-full/main.tf b/quickstart/101-virtual-network-manager-create/101-full/main.tf new file mode 100644 index 000000000..8c0fdf58d --- /dev/null +++ b/quickstart/101-virtual-network-manager-create/101-full/main.tf @@ -0,0 +1,180 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.56.0" + } + } +} + +provider "azurerm" { + features {} +} + +# Define variables + +variable "region" { + type = string + default = "eastus" +} + +variable "subscriptionID" { + type = string + default = "6a5f35e9-6951-499d-a36b-83c6c6eed44a" +} +variable "resourceGroup" { + type = string + default = "rg-learn-eastus-001" +} + +variable "networkManager" { + type = string + default = "nm-learn-eastus-001" +} + +variable "networkGroup" { + type = string + default = "ng-learn-eastus-001" +} + +variable "configurationName" { + type = string + default = "connectivityconfig" +} + +variable "connectivityTopology" { + type = string + default = "Mesh" +} + +variable "targetRegion" { + type = string + default = "eastus" +} + +variable "commitType"{ + type = string + default = "connectivity" +} + +# Create the Resource Group + +resource "azurerm_resource_group" "rg" { + name = var.resourceGroup + location = var.region +} + +# Create a Virtual Network Manager instance + +data "azurerm_subscription" "current" { +} + +resource "azurerm_network_manager" "networkManager" { + name = var.networkManager + location = var.region + resource_group_name = var.resourceGroup + scope { + subscription_ids = [data.azurerm_subscription.current.id] + } + scope_accesses = ["Connectivity", "SecurityAdmin"] + description = "example network manager" + tags = { + foo = "bar" + } +} + +# Create three virtual networks +resource "azurerm_virtual_network" "vnet_001" { + name = "vnet-learn-prod-eastus-001" + resource_group_name = var.resourceGroup + location = var.region + address_space = ["10.0.0.0/16"] + depends_on = [azurerm_resource_group.rg] +} + +resource "azurerm_virtual_network" "vnet_002" { + name = "vnet-learn-prod-eastus-002" + resource_group_name = var.resourceGroup + location = var.region + address_space = ["10.1.0.0/16"] + depends_on = [azurerm_resource_group.rg] +} + +resource "azurerm_virtual_network" "vnet_003" { + name = "vnet-learn-test-eastus-003" + resource_group_name = var.resourceGroup + location = var.region + address_space = ["10.2.0.0/16"] + depends_on = [azurerm_resource_group.rg] +} + +# Add a subnet to each virtual network + +resource "azurerm_subnet" "subnet_vnet_001" { + name = "default" + virtual_network_name = azurerm_virtual_network.vnet_001.name + resource_group_name = var.resourceGroup + address_prefixes = ["10.0.0.0/24"] + depends_on = [azurerm_virtual_network.vnet_001] +} + +resource "azurerm_subnet" "subnet_vnet_002" { + name = "default" + virtual_network_name = azurerm_virtual_network.vnet_002.name + resource_group_name = var.resourceGroup + address_prefixes = ["10.1.0.0/24"] + depends_on = [azurerm_virtual_network.vnet_002] +} + +resource "azurerm_subnet" "subnet_vnet_003" { + name = "default" + virtual_network_name = azurerm_virtual_network.vnet_003.name + resource_group_name = var.resourceGroup + address_prefixes = ["10.2.0.0/24"] + depends_on = [azurerm_virtual_network.vnet_003] +} + +# Create a network group + +resource "null_resource" "ng_create" { + provisioner "local-exec" { + command = "az network manager group create --name ${var.networkGroup} --network-manager-name ${var.networkManager} --resource-group ${var.resourceGroup}" + } + depends_on = [azurerm_network_manager.networkManager] +} + +# Define membership for a mesh configuration + +resource "null_resource" "static_members"{ + provisioner "local-exec"{ + command="az network manager group static-member create --name vnet-02 --network-group ${var.networkGroup} --network-manager-name ${var.networkManager} --resource-group ${var.resourceGroup} --resource-id /subscriptions/${var.subscriptionID}/resourceGroups/${var.resourceGroup}/providers/Microsoft.Network/virtualnetworks/vnet-learn-prod-eastus-002" + } + depends_on=[null_resource.ng_create] +} + +resource "null_resource" "static_members01"{ + provisioner "local-exec"{ + command="az network manager group static-member create --name vnet-01 --network-group ${var.networkGroup} --network-manager-name ${var.networkManager} --resource-group ${var.resourceGroup} --resource-id /subscriptions/${var.subscriptionID}/resourceGroups/${var.resourceGroup}/providers/Microsoft.Network/virtualnetworks/vnet-learn-prod-eastus-001" + } + depends_on=[null_resource.ng_create] +} + +# Create a connectivity configuration +resource "null_resource" "connectivityConfig"{ + provisioner "local-exec"{ + command="az network manager connect-config create --configuration-name ${var.configurationName} --applies-to-groups network-group-id=/subscriptions/${var.subscriptionID}/resourceGroups/${var.resourceGroup}/providers/Microsoft.Network/networkManagers/myAVNM/networkGroups/${var.networkGroup} --connectivity-topology ${var.connectivityTopology} --network-manager-name ${var.networkManager} --resource-group ${var.resourceGroup}" + } + depends_on=[null_resource.ng_create] +} + +# Commit deployment +resource "null_resource" "commitDeployment"{ + provisioner "local-exec"{ + command="az network manager post-commit --network-manager-name ${var.networkManager} --commit-type ${var.commitType} --configuration-ids /subscriptions/${var.subscriptionID}/resourceGroups/${var.resourceGroup}/providers/Microsoft.Network/networkManagers/${var.networkManager}/connectivityConfigurations/${var.configurationName} --target-locations ${var.targetRegion} --resource-group ${var.resourceGroup}" + } + depends_on=[null_resource.ng_create] +} + + + + diff --git a/quickstart/101-virtual-network-manager-create/101-full/qs-avnm-terraform.md b/quickstart/101-virtual-network-manager-create/101-full/qs-avnm-terraform.md new file mode 100644 index 000000000..298292698 --- /dev/null +++ b/quickstart/101-virtual-network-manager-create/101-full/qs-avnm-terraform.md @@ -0,0 +1,214 @@ + + +--- +title: 'Quickstart: ' +description: +keywords: +ms.topic: quickstart +ms.date: +ms.custom: devx-track-terraform +author: +ms.author: +--- + +# Quickstart: + + + +Article tested with the following Terraform and Terraform provider versions: + +- [Terraform v1.2.7](https://releases.hashicorp.com/terraform/) +- [AzureRM Provider v.3.20.0](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) + + + +This article shows how to use Terraform to ... + +[!INCLUDE [Terraform abstract](~/azure-dev-docs-pr/articles/terraform/includes/abstract.md)] + + + +In this article, you learn how to: + +> [!div class="checklist"] + + +> * Task 1 +> * Task 2 +> * Task n + + + +> [!NOTE] +> The example code in this article is located in the [Azure Terraform GitHub repo](https://github.com/Azure/terraform/tree/master/...). See more [articles and sample code showing how to use Terraform to manage Azure resources](/azure/terraform) + + + +## Prerequisites + +[!INCLUDE [open-source-devops-prereqs-azure-subscription.md](~/azure-dev-docs-pr/articles/includes/open-source-devops-prereqs-azure-subscription.md)] + +- [Install and configure Terraform](/azure/developer/terraform/quickstart-configure) + + + +## Implement the Terraform code + + + +1. Create a directory in which to test and run the sample Terraform code and make it the current directory. + +1. Create a file named `providers.tf` and insert the following code: + + [!code-terraform[master]()] + + +1. Create a file named `main.tf` and insert the following code: + + [!code-terraform[master]()] + + +1. Create a file named `variables.tf` and insert the following code: + + [!code-terraform[master]()] + + +1. Create a file named `outputs.tf` and insert the following code: + + [!code-terraform[master]()] + + + + +1. Create a file named and insert the following code: + + [!code-terraform[master]()] + +## Initialize Terraform + +[!INCLUDE [terraform-init.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-init.md)] + +## Create a Terraform execution plan + +[!INCLUDE [terraform-plan.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-plan.md)] + +## Apply a Terraform execution plan + +[!INCLUDE [terraform-apply-plan.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-apply-plan.md)] + + + +## Verify the results + + + +## Clean up resources + + + +[!INCLUDE [terraform-plan-destroy.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-plan-destroy.md)] + +## Troubleshoot Terraform on Azure + + + +[Troubleshoot common problems when using Terraform on Azure](/azure/developer/terraform/troubleshoot) + +## Next steps + + + +> [!div class="nextstepaction"] +> \ No newline at end of file From 27c2712af118bb996b72bd2bfc711f132c056eff Mon Sep 17 00:00:00 2001 From: Michael Bender <102542398+mbender-ms@users.noreply.github.com> Date: Tue, 20 Jun 2023 09:48:42 -0500 Subject: [PATCH 2/6] Updates to outputs --- .../main.tfplan | Bin 0 -> 16344 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 quickstart/201-virtual-network-manager-deploy-secure-hub-spoke/main.tfplan diff --git a/quickstart/201-virtual-network-manager-deploy-secure-hub-spoke/main.tfplan b/quickstart/201-virtual-network-manager-deploy-secure-hub-spoke/main.tfplan new file mode 100644 index 0000000000000000000000000000000000000000..e2c8987f9743ed42697006305a8e6d47ab56137e GIT binary patch literal 16344 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 AuK)l5 literal 0 HcmV?d00001 From 47a204b73ff5c8b4597767bf0506f56a2b72dbb0 Mon Sep 17 00:00:00 2001 From: Michael Bender <102542398+mbender-ms@users.noreply.github.com> Date: Tue, 20 Jun 2023 10:29:54 -0500 Subject: [PATCH 3/6] Updates for Azure Policy add --- .../main.tf | 54 ++++- .../readme.md | 3 +- .../101-full/main.tf | 180 --------------- .../101-full/qs-avnm-terraform.md | 214 ------------------ 4 files changed, 50 insertions(+), 401 deletions(-) delete mode 100644 quickstart/101-virtual-network-manager-create/101-full/main.tf delete mode 100644 quickstart/101-virtual-network-manager-create/101-full/qs-avnm-terraform.md diff --git a/quickstart/101-virtual-network-manager-create-mesh/main.tf b/quickstart/101-virtual-network-manager-create-mesh/main.tf index db546ffb5..b1c6eb109 100644 --- a/quickstart/101-virtual-network-manager-create-mesh/main.tf +++ b/quickstart/101-virtual-network-manager-create-mesh/main.tf @@ -58,14 +58,56 @@ resource "azurerm_network_manager_network_group" "network_group" { network_manager_id = azurerm_network_manager.network_manager_instance.id } -# Add the three virtual networks to the network group as static members +# Add the 3 virtual networks to a network group as dynamic members with Azure Policy -resource "azurerm_network_manager_static_member" "static_members" { - count = 3 +resource "random_pet" "network_group_policy_name" { + prefix = "network-group-policy" +} + +resource "azurerm_policy_definition" "network_group_policy" { + name = "${random_pet.network_group_policy_name.id}" + policy_type = "Custom" + mode = "Microsoft.Network.Data" + display_name = "Policy Definition for Network Group" + + metadata = < - ---- -title: 'Quickstart: ' -description: -keywords: -ms.topic: quickstart -ms.date: -ms.custom: devx-track-terraform -author: -ms.author: ---- - -# Quickstart: - - - -Article tested with the following Terraform and Terraform provider versions: - -- [Terraform v1.2.7](https://releases.hashicorp.com/terraform/) -- [AzureRM Provider v.3.20.0](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) - - - -This article shows how to use Terraform to ... - -[!INCLUDE [Terraform abstract](~/azure-dev-docs-pr/articles/terraform/includes/abstract.md)] - - - -In this article, you learn how to: - -> [!div class="checklist"] - - -> * Task 1 -> * Task 2 -> * Task n - - - -> [!NOTE] -> The example code in this article is located in the [Azure Terraform GitHub repo](https://github.com/Azure/terraform/tree/master/...). See more [articles and sample code showing how to use Terraform to manage Azure resources](/azure/terraform) - - - -## Prerequisites - -[!INCLUDE [open-source-devops-prereqs-azure-subscription.md](~/azure-dev-docs-pr/articles/includes/open-source-devops-prereqs-azure-subscription.md)] - -- [Install and configure Terraform](/azure/developer/terraform/quickstart-configure) - - - -## Implement the Terraform code - - - -1. Create a directory in which to test and run the sample Terraform code and make it the current directory. - -1. Create a file named `providers.tf` and insert the following code: - - [!code-terraform[master]()] - - -1. Create a file named `main.tf` and insert the following code: - - [!code-terraform[master]()] - - -1. Create a file named `variables.tf` and insert the following code: - - [!code-terraform[master]()] - - -1. Create a file named `outputs.tf` and insert the following code: - - [!code-terraform[master]()] - - - - -1. Create a file named and insert the following code: - - [!code-terraform[master]()] - -## Initialize Terraform - -[!INCLUDE [terraform-init.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-init.md)] - -## Create a Terraform execution plan - -[!INCLUDE [terraform-plan.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-plan.md)] - -## Apply a Terraform execution plan - -[!INCLUDE [terraform-apply-plan.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-apply-plan.md)] - - - -## Verify the results - - - -## Clean up resources - - - -[!INCLUDE [terraform-plan-destroy.md](~/azure-dev-docs-pr/articles/terraform/includes/terraform-plan-destroy.md)] - -## Troubleshoot Terraform on Azure - - - -[Troubleshoot common problems when using Terraform on Azure](/azure/developer/terraform/troubleshoot) - -## Next steps - - - -> [!div class="nextstepaction"] -> \ No newline at end of file From 71252cd22057870be57834c9370b140c0981b43a Mon Sep 17 00:00:00 2001 From: Michael Bender <102542398+mbender-ms@users.noreply.github.com> Date: Tue, 20 Jun 2023 10:37:04 -0500 Subject: [PATCH 4/6] Updates for Azure Policy add --- .../main.tfplan | Bin 16344 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 quickstart/201-virtual-network-manager-deploy-secure-hub-spoke/main.tfplan diff --git a/quickstart/201-virtual-network-manager-deploy-secure-hub-spoke/main.tfplan b/quickstart/201-virtual-network-manager-deploy-secure-hub-spoke/main.tfplan deleted file mode 100644 index e2c8987f9743ed42697006305a8e6d47ab56137e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16344 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 AuK)l5 From 2ee94c111653acdeda34d0159ef5862a3b42bcae Mon Sep 17 00:00:00 2001 From: Michael Bender <102542398+mbender-ms@users.noreply.github.com> Date: Tue, 20 Jun 2023 10:43:54 -0500 Subject: [PATCH 5/6] Updates for Azure Policy add --- quickstart/101-virtual-network-manager-create-mesh/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickstart/101-virtual-network-manager-create-mesh/main.tf b/quickstart/101-virtual-network-manager-create-mesh/main.tf index b1c6eb109..d5435199e 100644 --- a/quickstart/101-virtual-network-manager-create-mesh/main.tf +++ b/quickstart/101-virtual-network-manager-create-mesh/main.tf @@ -58,7 +58,7 @@ resource "azurerm_network_manager_network_group" "network_group" { network_manager_id = azurerm_network_manager.network_manager_instance.id } -# Add the 3 virtual networks to a network group as dynamic members with Azure Policy +# Add three virtual networks to a network group as dynamic members with Azure Policy resource "random_pet" "network_group_policy_name" { prefix = "network-group-policy" From a9668118639c8cf6d196d25462532d4f5fdff5eb Mon Sep 17 00:00:00 2001 From: Michael Bender <102542398+mbender-ms@users.noreply.github.com> Date: Tue, 27 Jun 2023 09:38:36 -0500 Subject: [PATCH 6/6] updates to vnet code and test --- .../101-virtual-network-manager-create-mesh/main.tf | 9 +++++++-- .../101-virtual-network-manager-create-mesh/readme.md | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/quickstart/101-virtual-network-manager-create-mesh/main.tf b/quickstart/101-virtual-network-manager-create-mesh/main.tf index d5435199e..c352b1a16 100644 --- a/quickstart/101-virtual-network-manager-create-mesh/main.tf +++ b/quickstart/101-virtual-network-manager-create-mesh/main.tf @@ -11,9 +11,14 @@ resource "azurerm_resource_group" "rg" { } # Create three virtual networks +resource "random_string" "prefix" { + length = 4 + special = false + upper = false +} resource "random_pet" "virtual_network_name" { - prefix = "vnet" + prefix = "vnet-${random_string.prefix.result}" } resource "azurerm_virtual_network" "vnet" { count = 3 @@ -88,7 +93,7 @@ resource "azurerm_policy_definition" "network_group_policy" { "allOf": [ { "field": "Name", - "contains": "vnet" + "contains": "${random_pet.virtual_network_name.id}" } ] } diff --git a/quickstart/101-virtual-network-manager-create-mesh/readme.md b/quickstart/101-virtual-network-manager-create-mesh/readme.md index 3faa1502d..e761b6d96 100644 --- a/quickstart/101-virtual-network-manager-create-mesh/readme.md +++ b/quickstart/101-virtual-network-manager-create-mesh/readme.md @@ -5,6 +5,7 @@ This template deploys an Azure Virtual Network Manager instance with a connectiv ## Terraform resource types - [random_pet](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet) +- [random_string](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) - [azurerm_resource_group](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group) - [azurerm_virtual_network](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/virtual_network) - [azurerm_subnet](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/subnet)