From 0e669e82eca6cc41e3b964491b3b6e51e06aded8 Mon Sep 17 00:00:00 2001 From: Michael Bender Date: Tue, 16 May 2023 21:33:19 -0500 Subject: [PATCH] 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 00000000..8c0fdf58 --- /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 00000000..29829269 --- /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