From 7fcea4d183eaa2f5466098a009a9befa9fec33f2 Mon Sep 17 00:00:00 2001 From: Damien Caro Date: Mon, 30 Oct 2017 13:05:53 -0700 Subject: [PATCH 1/7] Added vnet datasource --- azurerm/data_source_vnet.go | 104 ++++++++++++++++++++++++++++++ azurerm/data_source_vnet_test.go | 105 +++++++++++++++++++++++++++++++ azurerm/provider.go | 1 + 3 files changed, 210 insertions(+) create mode 100644 azurerm/data_source_vnet.go create mode 100644 azurerm/data_source_vnet_test.go diff --git a/azurerm/data_source_vnet.go b/azurerm/data_source_vnet.go new file mode 100644 index 000000000000..4b480d407491 --- /dev/null +++ b/azurerm/data_source_vnet.go @@ -0,0 +1,104 @@ +package azurerm + +import ( + "fmt" + "net/http" + + "github.com/Azure/azure-sdk-for-go/arm/network" + "github.com/hashicorp/terraform/helper/schema" + //"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" +) + +func dataSourceArmVnet() *schema.Resource { + return &schema.Resource{ + Read: dataSourceArmVnetRead, + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + }, + + "resource_group_name": resourceGroupNameForDataSourceSchema(), + + "address_spaces": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "dns_servers": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + + "subnets": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, + } +} + +func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { + vnetClient := meta.(*ArmClient).vnetClient + + resGroup := d.Get("resource_group_name").(string) + name := d.Get("name").(string) + + resp, err := vnetClient.Get(resGroup, name, "") + if err != nil { + if resp.StatusCode == http.StatusNotFound { + d.SetId("") + } + return fmt.Errorf("Error making Read request on Azure public ip %s: %s", name, err) + } + + d.SetId(*resp.ID) + + if props := resp.VirtualNetworkPropertiesFormat; props != nil { + address_spaces := flattenVnetAddressPrefixes(props.AddressSpace.AddressPrefixes) + if err := d.Set("address_spaces", address_spaces); err != nil { + return err + } + + dns_servers := flattenVnetAddressPrefixes(props.DhcpOptions.DNSServers) + if err := d.Set("dns_servers", dns_servers); err != nil { + return err + } + + subnets := flattenVnetSubnetsAddressSpace(props.Subnets) + if err := d.Set("subnets", subnets); err != nil { + return err + } + } + + return nil +} + +func flattenVnetAddressPrefixes(input *[]string) []interface{} { + prefixes := make([]interface{}, 0) + + for _, prefix := range *input { + prefixes = append(prefixes, prefix) + } + + return prefixes +} + +func flattenVnetSubnetsAddressSpace(input *[]network.Subnet) []interface{} { + subnets := make([]interface{}, 0) + + for _, subnet := range *input { + subnets = append(subnets, *subnet.Name) + } + + return subnets +} diff --git a/azurerm/data_source_vnet_test.go b/azurerm/data_source_vnet_test.go new file mode 100644 index 000000000000..f4a7406b02a9 --- /dev/null +++ b/azurerm/data_source_vnet_test.go @@ -0,0 +1,105 @@ +package azurerm + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" +) + +func TestAccDataSourceAzureRMVnet_basic(t *testing.T) { + dataSourceName := "data.azurerm_vnet.test" + ri := acctest.RandInt() + + name := fmt.Sprintf("acctestvnet-%d", ri) + config := testAccDataSourceAzureRMVnet_basic(ri, testLocation()) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMVirtualNetworkDestroy, + Steps: []resource.TestStep{ + { + Config: config, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "name", name), + resource.TestCheckResourceAttr(dataSourceName, "dns_servers.0", "10.0.0.10"), + resource.TestCheckResourceAttr(dataSourceName, "address_spaces.0", "10.0.0.0/16"), + ), + }, + }, + }) +} + +// func TestAccDataSourceAzureRMVnet_Subnets(t *testing.T) { +// dataSourceName := "data.azurerm_vnet.test" +// ri := acctest.RandInt() + +// name := fmt.Sprintf("acctestvnet-%d", ri) +// //resourceGroupName := fmt.Sprintf("acctestRG-%d", ri) + +// config := testAccDataSourceAzureRMVnet_basic(ri, testLocation()) + +// resource.Test(t, resource.TestCase{ +// PreCheck: func() { testAccPreCheck(t) }, +// Providers: testAccProviders, +// CheckDestroy: testCheckAzureRMPublicIpDestroy, +// Steps: []resource.TestStep{ +// { +// Config: config, +// Check: resource.ComposeTestCheckFunc( +// resource.TestCheckResourceAttr(dataSourceName, "name", name), +// resource.TestCheckResourceAttr(dataSourceName, "dns_servers", `["10.0.0.10","10.0.0.11"]`), +// ), +// }, +// }, +// }) +// } + +func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { + return fmt.Sprintf(` + resource "azurerm_resource_group" "test" { + name = "acctest%d-rg" + location = "%s" + } + + resource "azurerm_virtual_network" "test" { + name = "acctestvnet-%d" + address_space = ["10.0.0.0/16"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + dns_servers = ["10.0.0.10"] + } + + data "azurerm_vnet" "test" { + resource_group_name = "${azurerm_resource_group.test.name}" + name = "${azurerm_virtual_network.test.name}" + } + + `, rInt, location, rInt) +} + +// func testAccDataSourceAzureRMVnet_Subnets(rInt int, location string) string { +// return fmt.Sprintf(` +// resource "azurerm_resource_group" "test" { +// name = "acctest%d-rg" +// location = "%s" +// } + +// resource "azurerm_virtual_network" "test" { +// name = "acctestvnet-%d" +// address_space = ["10.0.0.0/16"] +// location = "${azurerm_resource_group.test.location}" +// resource_group_name = "${azurerm_resource_group.test.name}" +// dns_servers = ["10.0.0.10","10.0.0.11"] +// } + +// data "azurerm_vnet" "test" { +// resource_group_name = "${azurerm_resource_group.test.name}" +// name = "${azurerm_virtual_network.test.name}" +// dns_servers = "${azurerm_virtual_network.test.dns_servers}" +// } + +// `, rInt, location, rInt) +// } diff --git a/azurerm/provider.go b/azurerm/provider.go index 8bf452d849a3..6ef55769d068 100644 --- a/azurerm/provider.go +++ b/azurerm/provider.go @@ -80,6 +80,7 @@ func Provider() terraform.ResourceProvider { "azurerm_snapshot": dataSourceArmSnapshot(), "azurerm_subnet": dataSourceArmSubnet(), "azurerm_subscription": dataSourceArmSubscription(), + "azurerm_vnet": dataSourceArmVnet(), }, ResourcesMap: map[string]*schema.Resource{ From 154f07725b7b4f4c3e9b577bc4b8ec89e59f3dbd Mon Sep 17 00:00:00 2001 From: Damien Caro Date: Wed, 1 Nov 2017 14:52:43 -0700 Subject: [PATCH 2/7] added vnet_peering --- azurerm/data_source_vnet.go | 34 +++++++-- azurerm/data_source_vnet_test.go | 120 +++++++++++++++++-------------- 2 files changed, 96 insertions(+), 58 deletions(-) diff --git a/azurerm/data_source_vnet.go b/azurerm/data_source_vnet.go index 4b480d407491..bdbf358f2dbf 100644 --- a/azurerm/data_source_vnet.go +++ b/azurerm/data_source_vnet.go @@ -43,6 +43,17 @@ func dataSourceArmVnet() *schema.Resource { Type: schema.TypeString, }, }, + + "vnet_peerings": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeList, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + }, }, } } @@ -58,7 +69,7 @@ func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { if resp.StatusCode == http.StatusNotFound { d.SetId("") } - return fmt.Errorf("Error making Read request on Azure public ip %s: %s", name, err) + return fmt.Errorf("Error making Read request on Azure virtual network %s: %s", name, err) } d.SetId(*resp.ID) @@ -74,12 +85,16 @@ func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { return err } - subnets := flattenVnetSubnetsAddressSpace(props.Subnets) + subnets := flattenVnetSubnetsNames(props.Subnets) if err := d.Set("subnets", subnets); err != nil { return err } - } + vnet_peerings := flattenVnetPeerings(props.VirtualNetworkPeerings) + if err := d.Set("vnet_peerings", vnet_peerings); err != nil { + return err + } + } return nil } @@ -89,16 +104,23 @@ func flattenVnetAddressPrefixes(input *[]string) []interface{} { for _, prefix := range *input { prefixes = append(prefixes, prefix) } - return prefixes } -func flattenVnetSubnetsAddressSpace(input *[]network.Subnet) []interface{} { +func flattenVnetSubnetsNames(input *[]network.Subnet) []interface{} { subnets := make([]interface{}, 0) for _, subnet := range *input { subnets = append(subnets, *subnet.Name) } - return subnets } + +func flattenVnetPeerings(input *[]network.VirtualNetworkPeering) []interface{} { + vnetpeerings := make([]interface{}, 0) + + for _, vnetpeering := range *input { + vnetpeerings = append(vnetpeerings, []string{*vnetpeering.Name, *vnetpeering.RemoteVirtualNetwork.ID}) + } + return vnetpeerings +} diff --git a/azurerm/data_source_vnet_test.go b/azurerm/data_source_vnet_test.go index f4a7406b02a9..afaef34e675a 100644 --- a/azurerm/data_source_vnet_test.go +++ b/azurerm/data_source_vnet_test.go @@ -16,46 +16,46 @@ func TestAccDataSourceAzureRMVnet_basic(t *testing.T) { config := testAccDataSourceAzureRMVnet_basic(ri, testLocation()) resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testCheckAzureRMVirtualNetworkDestroy, + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, Steps: []resource.TestStep{ { Config: config, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "name", name), - resource.TestCheckResourceAttr(dataSourceName, "dns_servers.0", "10.0.0.10"), + resource.TestCheckResourceAttr(dataSourceName, "dns_servers.0", "10.0.0.4"), resource.TestCheckResourceAttr(dataSourceName, "address_spaces.0", "10.0.0.0/16"), + resource.TestCheckResourceAttr(dataSourceName, "subnets.0", "subnet1"), ), }, }, }) } -// func TestAccDataSourceAzureRMVnet_Subnets(t *testing.T) { -// dataSourceName := "data.azurerm_vnet.test" -// ri := acctest.RandInt() - -// name := fmt.Sprintf("acctestvnet-%d", ri) -// //resourceGroupName := fmt.Sprintf("acctestRG-%d", ri) - -// config := testAccDataSourceAzureRMVnet_basic(ri, testLocation()) - -// resource.Test(t, resource.TestCase{ -// PreCheck: func() { testAccPreCheck(t) }, -// Providers: testAccProviders, -// CheckDestroy: testCheckAzureRMPublicIpDestroy, -// Steps: []resource.TestStep{ -// { -// Config: config, -// Check: resource.ComposeTestCheckFunc( -// resource.TestCheckResourceAttr(dataSourceName, "name", name), -// resource.TestCheckResourceAttr(dataSourceName, "dns_servers", `["10.0.0.10","10.0.0.11"]`), -// ), -// }, -// }, -// }) -// } +func TestAccDataSourceAzureRMVnet_peering(t *testing.T) { + firstDataSourceName := "data.azurerm_vnet.test" + ri := acctest.RandInt() + + name_vnet_1 := fmt.Sprintf("acctestvnet-1-%d", ri) + //name_peer := fmt.Sprintf("acctestpeer-1-%d", ri) + config := testAccDataSourceAzureRMVnet_peering(ri, testLocation()) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: config, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(firstDataSourceName, "name", name_vnet_1), + resource.TestCheckResourceAttr(firstDataSourceName, "address_spaces.0", "10.0.1.0/24"), + resource.TestCheckResourceAttr(firstDataSourceName, "vnet_peerings.#", "1"), + //resource.TestCheckResourceAttr(firstDataSourceName, "vnet_peerings.0.0", "peer-1to2"), + ), + }, + }, + }) +} func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { return fmt.Sprintf(` @@ -69,7 +69,12 @@ func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { address_space = ["10.0.0.0/16"] location = "${azurerm_resource_group.test.location}" resource_group_name = "${azurerm_resource_group.test.name}" - dns_servers = ["10.0.0.10"] + dns_servers = ["10.0.0.4"] + + subnet { + name = "subnet1" + address_prefix = "10.0.1.0/24" + } } data "azurerm_vnet" "test" { @@ -80,26 +85,37 @@ func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { `, rInt, location, rInt) } -// func testAccDataSourceAzureRMVnet_Subnets(rInt int, location string) string { -// return fmt.Sprintf(` -// resource "azurerm_resource_group" "test" { -// name = "acctest%d-rg" -// location = "%s" -// } - -// resource "azurerm_virtual_network" "test" { -// name = "acctestvnet-%d" -// address_space = ["10.0.0.0/16"] -// location = "${azurerm_resource_group.test.location}" -// resource_group_name = "${azurerm_resource_group.test.name}" -// dns_servers = ["10.0.0.10","10.0.0.11"] -// } - -// data "azurerm_vnet" "test" { -// resource_group_name = "${azurerm_resource_group.test.name}" -// name = "${azurerm_virtual_network.test.name}" -// dns_servers = "${azurerm_virtual_network.test.dns_servers}" -// } - -// `, rInt, location, rInt) -// } +func testAccDataSourceAzureRMVnet_peering(rInt int, location string) string { + return fmt.Sprintf(` + resource "azurerm_resource_group" "test" { + name = "acctest%d-rg" + location = "%s" + } + + resource "azurerm_virtual_network" "test1" { + name = "acctestvnet-1-%d" + address_space = ["10.0.1.0/24"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + } + + resource "azurerm_virtual_network" "test2" { + name = "acctestvnet-2-%d" + address_space = ["10.0.2.0/24"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + } + + resource "azurerm_virtual_network_peering" "test1" { + name = "peer-1to2" + resource_group_name = "${azurerm_resource_group.test.name}" + virtual_network_name = "${azurerm_virtual_network.test1.name}" + remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" + } + + data "azurerm_vnet" "test" { + resource_group_name = "${azurerm_resource_group.test.name}" + name = "${azurerm_virtual_network.test1.name}" + } + `, rInt, location, rInt, rInt) +} From 054102aa26f04a9fcb72c1fc9c04a32870ea8acc Mon Sep 17 00:00:00 2001 From: Damien Caro Date: Thu, 2 Nov 2017 16:42:19 -0700 Subject: [PATCH 3/7] changing to TypeMap --- azurerm/data_source_vnet.go | 25 +++++++++++++------------ azurerm/data_source_vnet_test.go | 10 ++++------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/azurerm/data_source_vnet.go b/azurerm/data_source_vnet.go index bdbf358f2dbf..2e94ce5a52c8 100644 --- a/azurerm/data_source_vnet.go +++ b/azurerm/data_source_vnet.go @@ -18,7 +18,10 @@ func dataSourceArmVnet() *schema.Resource { Required: true, }, - "resource_group_name": resourceGroupNameForDataSourceSchema(), + "resource_group_name": { + Type: schema.TypeString, + Required: true, + }, "address_spaces": { Type: schema.TypeList, @@ -45,14 +48,8 @@ func dataSourceArmVnet() *schema.Resource { }, "vnet_peerings": { - Type: schema.TypeList, + Type: schema.TypeMap, Computed: true, - Elem: &schema.Schema{ - Type: schema.TypeList, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - }, }, }, } @@ -116,11 +113,15 @@ func flattenVnetSubnetsNames(input *[]network.Subnet) []interface{} { return subnets } -func flattenVnetPeerings(input *[]network.VirtualNetworkPeering) []interface{} { - vnetpeerings := make([]interface{}, 0) +func flattenVnetPeerings(input *[]network.VirtualNetworkPeering) map[string]interface{} { + output := make(map[string]interface{}, 0) for _, vnetpeering := range *input { - vnetpeerings = append(vnetpeerings, []string{*vnetpeering.Name, *vnetpeering.RemoteVirtualNetwork.ID}) + key := *vnetpeering.Name + value := *vnetpeering.RemoteVirtualNetwork.ID + + output[key] = value + } - return vnetpeerings + return output } diff --git a/azurerm/data_source_vnet_test.go b/azurerm/data_source_vnet_test.go index afaef34e675a..2c568b93814e 100644 --- a/azurerm/data_source_vnet_test.go +++ b/azurerm/data_source_vnet_test.go @@ -33,11 +33,10 @@ func TestAccDataSourceAzureRMVnet_basic(t *testing.T) { } func TestAccDataSourceAzureRMVnet_peering(t *testing.T) { - firstDataSourceName := "data.azurerm_vnet.test" + dataSourceName := "data.azurerm_vnet.test" ri := acctest.RandInt() name_vnet_1 := fmt.Sprintf("acctestvnet-1-%d", ri) - //name_peer := fmt.Sprintf("acctestpeer-1-%d", ri) config := testAccDataSourceAzureRMVnet_peering(ri, testLocation()) resource.Test(t, resource.TestCase{ @@ -47,10 +46,9 @@ func TestAccDataSourceAzureRMVnet_peering(t *testing.T) { { Config: config, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(firstDataSourceName, "name", name_vnet_1), - resource.TestCheckResourceAttr(firstDataSourceName, "address_spaces.0", "10.0.1.0/24"), - resource.TestCheckResourceAttr(firstDataSourceName, "vnet_peerings.#", "1"), - //resource.TestCheckResourceAttr(firstDataSourceName, "vnet_peerings.0.0", "peer-1to2"), + resource.TestCheckResourceAttr(dataSourceName, "name", name_vnet_1), + resource.TestCheckResourceAttr(dataSourceName, "address_spaces.0", "10.0.1.0/24"), + resource.TestCheckResourceAttr(dataSourceName, "vnet_peerings.%", "1"), ), }, }, From c32a560ca8d20a18b68d792fcea7eb67616d0491 Mon Sep 17 00:00:00 2001 From: Damien Caro Date: Wed, 15 Nov 2017 00:25:06 -0600 Subject: [PATCH 4/7] Changed to azure_virtual_network, added crash control and added documentation. --- ...vnet.go => data_source_virtual_network.go} | 33 ++++++++++------- ...go => data_source_virtual_network_test.go} | 20 +++++----- azurerm/provider.go | 2 +- website/docs/d/virtual_network.html.markdown | 37 +++++++++++++++++++ 4 files changed, 67 insertions(+), 25 deletions(-) rename azurerm/{data_source_vnet.go => data_source_virtual_network.go} (75%) rename azurerm/{data_source_vnet_test.go => data_source_virtual_network_test.go} (82%) create mode 100644 website/docs/d/virtual_network.html.markdown diff --git a/azurerm/data_source_vnet.go b/azurerm/data_source_virtual_network.go similarity index 75% rename from azurerm/data_source_vnet.go rename to azurerm/data_source_virtual_network.go index 2e94ce5a52c8..8fa68d5061b9 100644 --- a/azurerm/data_source_vnet.go +++ b/azurerm/data_source_virtual_network.go @@ -2,14 +2,13 @@ package azurerm import ( "fmt" - "net/http" "github.com/Azure/azure-sdk-for-go/arm/network" "github.com/hashicorp/terraform/helper/schema" - //"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" ) -func dataSourceArmVnet() *schema.Resource { +func dataSourceArmVirtualNetwork() *schema.Resource { return &schema.Resource{ Read: dataSourceArmVnetRead, Schema: map[string]*schema.Schema{ @@ -63,10 +62,10 @@ func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { resp, err := vnetClient.Get(resGroup, name, "") if err != nil { - if resp.StatusCode == http.StatusNotFound { - d.SetId("") + if utils.ResponseWasNotFound(resp.Response) { + return fmt.Errorf("Error making Read request on Azure virtual network %s: %+v", name, err) } - return fmt.Errorf("Error making Read request on Azure virtual network %s: %s", name, err) + return err } d.SetId(*resp.ID) @@ -98,8 +97,10 @@ func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { func flattenVnetAddressPrefixes(input *[]string) []interface{} { prefixes := make([]interface{}, 0) - for _, prefix := range *input { - prefixes = append(prefixes, prefix) + if myprefixes := input; myprefixes != nil { + for _, prefix := range *myprefixes { + prefixes = append(prefixes, prefix) + } } return prefixes } @@ -107,8 +108,10 @@ func flattenVnetAddressPrefixes(input *[]string) []interface{} { func flattenVnetSubnetsNames(input *[]network.Subnet) []interface{} { subnets := make([]interface{}, 0) - for _, subnet := range *input { - subnets = append(subnets, *subnet.Name) + if mysubnets := input; mysubnets != nil { + for _, subnet := range *mysubnets { + subnets = append(subnets, *subnet.Name) + } } return subnets } @@ -116,12 +119,14 @@ func flattenVnetSubnetsNames(input *[]network.Subnet) []interface{} { func flattenVnetPeerings(input *[]network.VirtualNetworkPeering) map[string]interface{} { output := make(map[string]interface{}, 0) - for _, vnetpeering := range *input { - key := *vnetpeering.Name - value := *vnetpeering.RemoteVirtualNetwork.ID + if peerings := input; peerings != nil { + for _, vnetpeering := range *peerings { + key := *vnetpeering.Name + value := *vnetpeering.RemoteVirtualNetwork.ID - output[key] = value + output[key] = value + } } return output } diff --git a/azurerm/data_source_vnet_test.go b/azurerm/data_source_virtual_network_test.go similarity index 82% rename from azurerm/data_source_vnet_test.go rename to azurerm/data_source_virtual_network_test.go index 2c568b93814e..e218579f87f3 100644 --- a/azurerm/data_source_vnet_test.go +++ b/azurerm/data_source_virtual_network_test.go @@ -8,12 +8,12 @@ import ( "github.com/hashicorp/terraform/helper/resource" ) -func TestAccDataSourceAzureRMVnet_basic(t *testing.T) { - dataSourceName := "data.azurerm_vnet.test" +func TestAccDataSourceArmVirtualNetwork_basic(t *testing.T) { + dataSourceName := "data.azurerm_virtual_network.test" ri := acctest.RandInt() name := fmt.Sprintf("acctestvnet-%d", ri) - config := testAccDataSourceAzureRMVnet_basic(ri, testLocation()) + config := testAccDataSourceArmVirtualNetwork_basic(ri, testLocation()) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -32,12 +32,12 @@ func TestAccDataSourceAzureRMVnet_basic(t *testing.T) { }) } -func TestAccDataSourceAzureRMVnet_peering(t *testing.T) { - dataSourceName := "data.azurerm_vnet.test" +func TestAccDataSourceArmVirtualNetwork_peering(t *testing.T) { + dataSourceName := "data.azurerm_virtual_network.test" ri := acctest.RandInt() name_vnet_1 := fmt.Sprintf("acctestvnet-1-%d", ri) - config := testAccDataSourceAzureRMVnet_peering(ri, testLocation()) + config := testAccDataSourceArmVirtualNetwork_peering(ri, testLocation()) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -55,7 +55,7 @@ func TestAccDataSourceAzureRMVnet_peering(t *testing.T) { }) } -func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { +func testAccDataSourceArmVirtualNetwork_basic(rInt int, location string) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { name = "acctest%d-rg" @@ -75,7 +75,7 @@ func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { } } - data "azurerm_vnet" "test" { + data "azurerm_virtual_network" "test" { resource_group_name = "${azurerm_resource_group.test.name}" name = "${azurerm_virtual_network.test.name}" } @@ -83,7 +83,7 @@ func testAccDataSourceAzureRMVnet_basic(rInt int, location string) string { `, rInt, location, rInt) } -func testAccDataSourceAzureRMVnet_peering(rInt int, location string) string { +func testAccDataSourceArmVirtualNetwork_peering(rInt int, location string) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { name = "acctest%d-rg" @@ -111,7 +111,7 @@ func testAccDataSourceAzureRMVnet_peering(rInt int, location string) string { remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" } - data "azurerm_vnet" "test" { + data "azurerm_virtual_network" "test" { resource_group_name = "${azurerm_resource_group.test.name}" name = "${azurerm_virtual_network.test1.name}" } diff --git a/azurerm/provider.go b/azurerm/provider.go index 6ef55769d068..a81a0ae5b763 100644 --- a/azurerm/provider.go +++ b/azurerm/provider.go @@ -80,7 +80,7 @@ func Provider() terraform.ResourceProvider { "azurerm_snapshot": dataSourceArmSnapshot(), "azurerm_subnet": dataSourceArmSubnet(), "azurerm_subscription": dataSourceArmSubscription(), - "azurerm_vnet": dataSourceArmVnet(), + "azurerm_virtual_network": dataSourceArmVirtualNetwork(), }, ResourcesMap: map[string]*schema.Resource{ diff --git a/website/docs/d/virtual_network.html.markdown b/website/docs/d/virtual_network.html.markdown new file mode 100644 index 000000000000..72a0d147df31 --- /dev/null +++ b/website/docs/d/virtual_network.html.markdown @@ -0,0 +1,37 @@ +--- +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_virtual_network" +sidebar_current: "docs-azurerm-datasource-virtual-network" +description: |- + Get information about the specified Virtual Network. +--- + +# azurerm_virtual_network + +Use this data source to access the properties of an Azure Virtual Network. + +## Example Usage + +```hcl +data "azurerm_virtual_network" "test" { + name = "production" + resource_group_name = "networking" +} + +output "virtual_network_id" { + value = "${data.azurerm_virtual_network.test.id}" +} +``` + +## Argument Reference + +* `name` - (Required) Specifies the name of the Virtual Network. +* `resource_group_name` - (Required) Specifies the name of the resource group the Virtual Network is located in. + +## Attributes Reference + +* `id` - The ID of the virtual network. +* `address_spaces` - The list of address spaces used by the virtual network. +* `dns_servers` - The list of DNS servers used by the virtual network. +* `subnets` - The list of name of the subnets that are attached to this virtual network. +* `vnet_peerings` - A mapping of name - virtual network id of the virtual network peerings. From b5be3fad90ff758331d1714f7285990ac54a0835 Mon Sep 17 00:00:00 2001 From: Damien Caro Date: Sat, 25 Nov 2017 18:24:26 -0800 Subject: [PATCH 5/7] removed tabs, used spaces --- azurerm/data_source_virtual_network_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azurerm/data_source_virtual_network_test.go b/azurerm/data_source_virtual_network_test.go index e218579f87f3..8830b6c40391 100644 --- a/azurerm/data_source_virtual_network_test.go +++ b/azurerm/data_source_virtual_network_test.go @@ -70,7 +70,7 @@ func testAccDataSourceArmVirtualNetwork_basic(rInt int, location string) string dns_servers = ["10.0.0.4"] subnet { - name = "subnet1" + name = "subnet1" address_prefix = "10.0.1.0/24" } } @@ -105,15 +105,15 @@ func testAccDataSourceArmVirtualNetwork_peering(rInt int, location string) strin } resource "azurerm_virtual_network_peering" "test1" { - name = "peer-1to2" - resource_group_name = "${azurerm_resource_group.test.name}" - virtual_network_name = "${azurerm_virtual_network.test1.name}" - remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" + name = "peer-1to2" + resource_group_name = "${azurerm_resource_group.test.name}" + virtual_network_name = "${azurerm_virtual_network.test1.name}" + remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" } data "azurerm_virtual_network" "test" { resource_group_name = "${azurerm_resource_group.test.name}" - name = "${azurerm_virtual_network.test1.name}" + name = "${azurerm_virtual_network.test1.name}" } `, rInt, location, rInt, rInt) } From d340a00fb9a4fb478c8603bcd58a7a765d07d37d Mon Sep 17 00:00:00 2001 From: tombuildsstuff Date: Fri, 8 Dec 2017 11:02:16 +0000 Subject: [PATCH 6/7] Splitting the data source out into it's own step --- azurerm/data_source_virtual_network_test.go | 142 ++++++++++++-------- 1 file changed, 87 insertions(+), 55 deletions(-) diff --git a/azurerm/data_source_virtual_network_test.go b/azurerm/data_source_virtual_network_test.go index 8830b6c40391..6e55fa488453 100644 --- a/azurerm/data_source_virtual_network_test.go +++ b/azurerm/data_source_virtual_network_test.go @@ -37,14 +37,17 @@ func TestAccDataSourceArmVirtualNetwork_peering(t *testing.T) { ri := acctest.RandInt() name_vnet_1 := fmt.Sprintf("acctestvnet-1-%d", ri) - config := testAccDataSourceArmVirtualNetwork_peering(ri, testLocation()) + location := testLocation() resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, Steps: []resource.TestStep{ { - Config: config, + Config: testAccDataSourceArmVirtualNetwork_peering(ri, location), + }, + { + Config: testAccDataSourceArmVirtualNetwork_peeringWithDataSource(ri, location), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "name", name_vnet_1), resource.TestCheckResourceAttr(dataSourceName, "address_spaces.0", "10.0.1.0/24"), @@ -57,63 +60,92 @@ func TestAccDataSourceArmVirtualNetwork_peering(t *testing.T) { func testAccDataSourceArmVirtualNetwork_basic(rInt int, location string) string { return fmt.Sprintf(` - resource "azurerm_resource_group" "test" { - name = "acctest%d-rg" - location = "%s" - } - - resource "azurerm_virtual_network" "test" { - name = "acctestvnet-%d" - address_space = ["10.0.0.0/16"] - location = "${azurerm_resource_group.test.location}" - resource_group_name = "${azurerm_resource_group.test.name}" - dns_servers = ["10.0.0.4"] - - subnet { - name = "subnet1" - address_prefix = "10.0.1.0/24" - } - } - - data "azurerm_virtual_network" "test" { - resource_group_name = "${azurerm_resource_group.test.name}" - name = "${azurerm_virtual_network.test.name}" - } +resource "azurerm_resource_group" "test" { + name = "acctest%d-rg" + location = "%s" +} +resource "azurerm_virtual_network" "test" { + name = "acctestvnet-%d" + address_space = ["10.0.0.0/16"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + dns_servers = ["10.0.0.4"] + + subnet { + name = "subnet1" + address_prefix = "10.0.1.0/24" + } +} + +data "azurerm_virtual_network" "test" { + resource_group_name = "${azurerm_resource_group.test.name}" + name = "${azurerm_virtual_network.test.name}" +} `, rInt, location, rInt) } func testAccDataSourceArmVirtualNetwork_peering(rInt int, location string) string { return fmt.Sprintf(` - resource "azurerm_resource_group" "test" { - name = "acctest%d-rg" - location = "%s" - } - - resource "azurerm_virtual_network" "test1" { - name = "acctestvnet-1-%d" - address_space = ["10.0.1.0/24"] - location = "${azurerm_resource_group.test.location}" - resource_group_name = "${azurerm_resource_group.test.name}" - } - - resource "azurerm_virtual_network" "test2" { - name = "acctestvnet-2-%d" - address_space = ["10.0.2.0/24"] - location = "${azurerm_resource_group.test.location}" - resource_group_name = "${azurerm_resource_group.test.name}" - } - - resource "azurerm_virtual_network_peering" "test1" { - name = "peer-1to2" - resource_group_name = "${azurerm_resource_group.test.name}" - virtual_network_name = "${azurerm_virtual_network.test1.name}" - remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" - } - - data "azurerm_virtual_network" "test" { - resource_group_name = "${azurerm_resource_group.test.name}" - name = "${azurerm_virtual_network.test1.name}" - } - `, rInt, location, rInt, rInt) +resource "azurerm_resource_group" "test" { + name = "acctest%d-rg" + location = "%s" +} + +resource "azurerm_virtual_network" "test1" { + name = "acctestvnet-1-%d" + address_space = ["10.0.1.0/24"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" +} + +resource "azurerm_virtual_network" "test2" { + name = "acctestvnet-2-%d" + address_space = ["10.0.2.0/24"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" +} + +resource "azurerm_virtual_network_peering" "test1" { + name = "peer-1to2" + resource_group_name = "${azurerm_resource_group.test.name}" + virtual_network_name = "${azurerm_virtual_network.test1.name}" + remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" +} +`, rInt, location, rInt, rInt) +} + +func testAccDataSourceArmVirtualNetwork_peeringWithDataSource(rInt int, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctest%d-rg" + location = "%s" +} + +resource "azurerm_virtual_network" "test1" { + name = "acctestvnet-1-%d" + address_space = ["10.0.1.0/24"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" +} + +resource "azurerm_virtual_network" "test2" { + name = "acctestvnet-2-%d" + address_space = ["10.0.2.0/24"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" +} + +resource "azurerm_virtual_network_peering" "test1" { + name = "peer-1to2" + resource_group_name = "${azurerm_resource_group.test.name}" + virtual_network_name = "${azurerm_virtual_network.test1.name}" + remote_virtual_network_id = "${azurerm_virtual_network.test2.id}" +} + +data "azurerm_virtual_network" "test" { + resource_group_name = "${azurerm_resource_group.test.name}" + name = "${azurerm_virtual_network.test1.name}" +} +`, rInt, location, rInt, rInt) } From e9a3ea64802b9adb9131d525d96dfb34afc35d88 Mon Sep 17 00:00:00 2001 From: tombuildsstuff Date: Fri, 8 Dec 2017 12:05:06 +0000 Subject: [PATCH 7/7] Minor refactoring --- azurerm/data_source_virtual_network.go | 18 +++++++++--------- azurerm/data_source_virtual_network_test.go | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/azurerm/data_source_virtual_network.go b/azurerm/data_source_virtual_network.go index 8fa68d5061b9..f8084f51b985 100644 --- a/azurerm/data_source_virtual_network.go +++ b/azurerm/data_source_virtual_network.go @@ -55,15 +55,15 @@ func dataSourceArmVirtualNetwork() *schema.Resource { } func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { - vnetClient := meta.(*ArmClient).vnetClient + client := meta.(*ArmClient).vnetClient resGroup := d.Get("resource_group_name").(string) name := d.Get("name").(string) - resp, err := vnetClient.Get(resGroup, name, "") + resp, err := client.Get(resGroup, name, "") if err != nil { if utils.ResponseWasNotFound(resp.Response) { - return fmt.Errorf("Error making Read request on Azure virtual network %s: %+v", name, err) + return fmt.Errorf("Error making Read request on Azure virtual network %q (resource group %q): %+v", name, resGroup, err) } return err } @@ -71,13 +71,13 @@ func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { d.SetId(*resp.ID) if props := resp.VirtualNetworkPropertiesFormat; props != nil { - address_spaces := flattenVnetAddressPrefixes(props.AddressSpace.AddressPrefixes) - if err := d.Set("address_spaces", address_spaces); err != nil { + addressSpaces := flattenVnetAddressPrefixes(props.AddressSpace.AddressPrefixes) + if err := d.Set("address_spaces", addressSpaces); err != nil { return err } - dns_servers := flattenVnetAddressPrefixes(props.DhcpOptions.DNSServers) - if err := d.Set("dns_servers", dns_servers); err != nil { + dnsServers := flattenVnetAddressPrefixes(props.DhcpOptions.DNSServers) + if err := d.Set("dns_servers", dnsServers); err != nil { return err } @@ -86,8 +86,8 @@ func dataSourceArmVnetRead(d *schema.ResourceData, meta interface{}) error { return err } - vnet_peerings := flattenVnetPeerings(props.VirtualNetworkPeerings) - if err := d.Set("vnet_peerings", vnet_peerings); err != nil { + vnetPeerings := flattenVnetPeerings(props.VirtualNetworkPeerings) + if err := d.Set("vnet_peerings", vnetPeerings); err != nil { return err } } diff --git a/azurerm/data_source_virtual_network_test.go b/azurerm/data_source_virtual_network_test.go index 6e55fa488453..74d3c9090eb6 100644 --- a/azurerm/data_source_virtual_network_test.go +++ b/azurerm/data_source_virtual_network_test.go @@ -36,7 +36,7 @@ func TestAccDataSourceArmVirtualNetwork_peering(t *testing.T) { dataSourceName := "data.azurerm_virtual_network.test" ri := acctest.RandInt() - name_vnet_1 := fmt.Sprintf("acctestvnet-1-%d", ri) + virtualNetworkName := fmt.Sprintf("acctestvnet-1-%d", ri) location := testLocation() resource.Test(t, resource.TestCase{ @@ -49,7 +49,7 @@ func TestAccDataSourceArmVirtualNetwork_peering(t *testing.T) { { Config: testAccDataSourceArmVirtualNetwork_peeringWithDataSource(ri, location), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(dataSourceName, "name", name_vnet_1), + resource.TestCheckResourceAttr(dataSourceName, "name", virtualNetworkName), resource.TestCheckResourceAttr(dataSourceName, "address_spaces.0", "10.0.1.0/24"), resource.TestCheckResourceAttr(dataSourceName, "vnet_peerings.%", "1"), ),