Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
"google_compute_networks": compute.DataSourceGoogleComputeNetworks(),
"google_compute_network_attachment": compute.DataSourceGoogleComputeNetworkAttachment(),
"google_compute_network_endpoint_group": compute.DataSourceGoogleComputeNetworkEndpointGroup(),
"google_compute_network_endpoint_groups": compute.DataSourceGoogleComputeNetworkEndpointGroups(),
"google_compute_network_peering": compute.DataSourceComputeNetworkPeering(),
"google_compute_node_types": compute.DataSourceGoogleComputeNodeTypes(),
"google_compute_regions": compute.DataSourceGoogleComputeRegions(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package compute

import (
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
)

func DataSourceGoogleComputeNetworkEndpointGroups() *schema.Resource {
// Generate datasource schema from resource
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceComputeNetworkEndpointGroup().Schema)

return &schema.Resource{
Read: dataSourceComputeNetworkEndpointGroupsRead,
Schema: map[string]*schema.Schema{
"filter": {
Type: schema.TypeString,
Optional: true,
},

"project": {
Type: schema.TypeString,
Optional: true,
},

"zone": {
Type: schema.TypeString,
Optional: true,
},

"network_endpoint_groups": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: dsSchema,
},
},
},
}
}

func dataSourceComputeNetworkEndpointGroupsRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*transport_tpg.Config)
id := ""

userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
if err != nil {
return err
}
project, err := tpgresource.GetProject(d, config)
if err != nil {
return err
}
zone, err := tpgresource.GetZone(d, config)
if err != nil {
return err
}
id = fmt.Sprintf("projects/%s/zones/%s/networkEndpointGroups", project, zone)
d.SetId(id)

filter := d.Get("filter").(string)

networkEndpointGroups := make([]map[string]interface{}, 0)

networkEndpointGroupsList, err := config.NewComputeClient(userAgent).NetworkEndpointGroups.List(project, zone).Filter(filter).Do()
if err != nil {
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("NetworkEndpointGroups : %s %s", project, zone))
}

for _, neg := range networkEndpointGroupsList.Items {
network, err := tpgresource.GetRelativePath(neg.Network)
if err != nil {
return err
}
subnetwork, err := tpgresource.GetRelativePath(neg.Subnetwork)
if err != nil {
return err
}
networkEndpointGroups = append(networkEndpointGroups, map[string]interface{}{
"self_link": neg.SelfLink,
"name": neg.Name,
"description": neg.Description,
"network_endpoint_type": neg.NetworkEndpointType,
"network": network,
"subnetwork": subnetwork,
"default_port": neg.DefaultPort,
"size": neg.Size,
})
}

if err := d.Set("network_endpoint_groups", networkEndpointGroups); err != nil {
return fmt.Errorf("Error retrieving network endpoint groups: %s", err)
}

return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package compute_test

import (
"testing"

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-provider-google/google/acctest"
)

func TestAccDataSourceComputeNetworkEndpointGroups(t *testing.T) {
t.Parallel()

context := map[string]interface{}{
"random_suffix": acctest.RandString(t, 10),
}

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
Steps: []resource.TestStep{
{
Config: testAccDataSourceComputeNetworkEndpointGroupsConfig(context),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.#", "2"),
// Test schema
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.name"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.network"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.subnetwork"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.network_endpoint_type"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.self_link"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.default_port"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.0.size"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.name"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.network"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.subnetwork"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.network_endpoint_type"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.self_link"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.default_port"),
resource.TestCheckResourceAttrSet("data.google_compute_network_endpoint_groups.bar", "network_endpoint_groups.1.size"),
),
},
},
})
}

func testAccDataSourceComputeNetworkEndpointGroupsConfig(context map[string]interface{}) string {
return acctest.Nprintf(`
resource "google_compute_network_endpoint_group" "neg-a" {
name = "tf-test-my-lb-ds-neg-%{random_suffix}-a"
network = "${google_compute_network.default.self_link}"
subnetwork = "${google_compute_subnetwork.default.self_link}"
default_port = "90"
zone = "us-central1-a"
}

resource "google_compute_network_endpoint_group" "neg-b" {
name = "tf-test-my-lb-ds-neg-%{random_suffix}-b"
network = "${google_compute_network.default.self_link}"
subnetwork = "${google_compute_subnetwork.default.self_link}"
default_port = "91"
zone = "us-central1-a"
}

resource "google_compute_network" "default" {
name = "tf-test-ds-neg-network%{random_suffix}"
auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "default" {
name = "tf-test-ds-neg-subnetwork%{random_suffix}"
ip_cidr_range = "10.0.0.0/16"
region = "us-central1"
network = "${google_compute_network.default.self_link}"
}

data "google_compute_network_endpoint_groups" "bar" {
zone = "us-central1-a"
filter = "name:tf-test-my-lb-ds-neg-%{random_suffix}*"

depends_on = [
google_compute_network_endpoint_group.neg-a,
google_compute_network_endpoint_group.neg-b
]
}
`, context)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
subcategory: "Compute Engine"
description: |-
Retrieve Network Endpoint Groups in a zone.
---

# google_compute_network_endpoint_groups

Use this data source to fetch a list of Network Endpoint Groups available in a
project and zone.

## Example Usage

```hcl
data "google_compute_network_endpoint_groups" "negs" {
zone = "us-central1-a"
filter = "networkEdpointType=GCE_VM_IP_PORT"
}
```

## Argument Reference

The following arguments are supported:

* `project` - (Optional) The ID of the project to list Network Endpoint Groups in. If it is not provided, the provider project is used.

* `zone` (Optional) - The zone to list Network Endpoint Groups for. If `zone` is not specified, the provider-level zone must be set and is used
instead.

* `filter` - (Optional) A filter expression that filters Network Endpoint Groups listed in the response.

## Attributes Reference

In addition the arguments listed above, the following attributes are exported:

* `network_endpoint_groups` - A list of all retrieved Network Endpoint Groups. For list of the attributes, see
the `google_compute_network_endpoint_group` data source.
Loading