Skip to content

Commit 1b1cfc1

Browse files
Add data source for Network Management Connectivity Tests (#15335) (#10856)
[upstream:9870b22bdb63d32435d6dfae0f78d52828ffe0bf] Signed-off-by: Modular Magician <[email protected]>
1 parent 1dc241c commit 1b1cfc1

File tree

5 files changed

+645
-0
lines changed

5 files changed

+645
-0
lines changed

.changelog/15335.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-datasource
2+
`google_network_management_connectivity_tests`
3+
```

google-beta/provider/provider_mmv1_resources.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
465465
"google_vmwareengine_vcenter_credentials": vmwareengine.DataSourceVmwareengineVcenterCredentials(),
466466
"google_compute_region_backend_service": compute.DataSourceGoogleComputeRegionBackendService(),
467467
"google_network_management_connectivity_test_run": networkmanagement.DataSourceGoogleNetworkManagementTestRun(),
468+
"google_network_management_connectivity_tests": networkmanagement.DataSourceGoogleNetworkManagementConnectivityTests(),
468469
// ####### END handwritten datasources ###########
469470
}
470471

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
// ----------------------------------------------------------------------------
4+
//
5+
// *** AUTO GENERATED CODE *** Type: Handwritten ***
6+
//
7+
// ----------------------------------------------------------------------------
8+
//
9+
// This code is generated by Magic Modules using the following:
10+
//
11+
// Source file: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/third_party/terraform/services/networkmanagement/data_source_network_management_connectivity_tests.go
12+
//
13+
// DO NOT EDIT this file directly. Any changes made to this file will be
14+
// overwritten during the next generation cycle.
15+
//
16+
// ----------------------------------------------------------------------------
17+
package networkmanagement
18+
19+
import (
20+
"fmt"
21+
"strings"
22+
23+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
24+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
25+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
26+
)
27+
28+
func DataSourceGoogleNetworkManagementConnectivityTests() *schema.Resource {
29+
testSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceNetworkManagementConnectivityTest().Schema)
30+
return &schema.Resource{
31+
Read: dataSourceGoogleNetworkManagementConnectivityTests,
32+
Schema: map[string]*schema.Schema{
33+
"project": {
34+
Type: schema.TypeString,
35+
Optional: true,
36+
Computed: true,
37+
},
38+
"filter": {
39+
Type: schema.TypeString,
40+
Description: `Lists the ConnectivityTests that match the filter expression. A filter expression filters the resources listed in the response.`,
41+
Optional: true,
42+
},
43+
"connectivity_tests": {
44+
Type: schema.TypeList,
45+
Computed: true,
46+
Elem: &schema.Resource{
47+
Schema: testSchema,
48+
},
49+
},
50+
},
51+
UseJSONNumber: true,
52+
}
53+
}
54+
55+
func dataSourceGoogleNetworkManagementConnectivityTests(d *schema.ResourceData, meta interface{}) error {
56+
config := meta.(*transport_tpg.Config)
57+
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
58+
if err != nil {
59+
return err
60+
}
61+
62+
url, err := tpgresource.ReplaceVars(d, config, "{{NetworkManagementBasePath}}projects/{{project}}/locations/global/connectivityTests")
63+
if err != nil {
64+
return err
65+
}
66+
67+
filter, has_filter := d.GetOk("filter")
68+
69+
if has_filter {
70+
url, err = transport_tpg.AddQueryParams(url, map[string]string{"filter": filter.(string)})
71+
if err != nil {
72+
return err
73+
}
74+
}
75+
76+
billingProject := ""
77+
78+
project, err := tpgresource.GetProject(d, config)
79+
if err != nil {
80+
return fmt.Errorf("Error fetching project for Connectivity Tests: %s", err)
81+
}
82+
billingProject = project
83+
84+
// err == nil indicates that the billing_project value was found
85+
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
86+
billingProject = bp
87+
}
88+
89+
// To handle pagination locally
90+
allTests := make([]interface{}, 0)
91+
token := ""
92+
for paginate := true; paginate; {
93+
if token != "" {
94+
url, err = transport_tpg.AddQueryParams(url, map[string]string{"pageToken": token})
95+
if err != nil {
96+
return err
97+
}
98+
}
99+
tests, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
100+
Config: config,
101+
Method: "GET",
102+
Project: billingProject,
103+
RawURL: url,
104+
UserAgent: userAgent,
105+
})
106+
if err != nil {
107+
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("NetworkManagementConnectivityTests %q", d.Id()))
108+
}
109+
testsInterface := tests["resources"]
110+
if testsInterface == nil {
111+
break
112+
}
113+
allTests = append(allTests, testsInterface.([]interface{})...)
114+
tokenInterface := tests["nextPageToken"]
115+
if tokenInterface == nil {
116+
paginate = false
117+
} else {
118+
paginate = true
119+
token = tokenInterface.(string)
120+
}
121+
}
122+
if err := d.Set("project", project); err != nil {
123+
return fmt.Errorf("error setting project: %s", err)
124+
}
125+
126+
if err := d.Set("filter", filter); err != nil {
127+
return fmt.Errorf("error setting filter: %s", err)
128+
}
129+
130+
if err := d.Set("connectivity_tests", flattenNetworkManagementConnectivityTests(allTests, d, config)); err != nil {
131+
return fmt.Errorf("error setting connectivity tests: %s", err)
132+
}
133+
134+
// Store the ID now
135+
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/global/connectivityTests")
136+
if err != nil {
137+
return fmt.Errorf("Error constructing id: %s", err)
138+
}
139+
if has_filter {
140+
id += "/filter=" + filter.(string)
141+
}
142+
d.SetId(id)
143+
return nil
144+
}
145+
146+
func flattenNetworkManagementConnectivityTests(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
147+
if v == nil {
148+
return v
149+
}
150+
l := v.([]interface{})
151+
transformed := make([]interface{}, 0, len(l))
152+
for _, raw := range l {
153+
original := raw.(map[string]interface{})
154+
if len(original) < 1 {
155+
// Do not include empty json objects coming back from the api
156+
continue
157+
}
158+
transformed = append(transformed, map[string]interface{}{
159+
"name": flattenNetworkManagementConnectivityTestName(original["name"], d, config),
160+
"description": flattenNetworkManagementConnectivityTestDescription(original["description"], d, config),
161+
"source": flattenNetworkManagementConnectivityTestSource(original["source"], d, config),
162+
"destination": flattenNetworkManagementConnectivityTestDestination(original["destination"], d, config),
163+
"protocol": flattenNetworkManagementConnectivityTestProtocol(original["protocol"], d, config),
164+
"related_projects": flattenNetworkManagementConnectivityTestRelatedProjects(original["relatedProjects"], d, config),
165+
"labels": flattenNetworkManagementConnectivityTestLabels(original["labels"], d, config),
166+
"round_trip": flattenNetworkManagementConnectivityTestRoundTrip(original["roundTrip"], d, config),
167+
"bypass_firewall_checks": flattenNetworkManagementConnectivityTestBypassFirewallChecks(original["bypassFirewallChecks"], d, config),
168+
"terraform_labels": flattenNetworkManagementConnectivityTestTerraformLabels(original["labels"], d, config),
169+
"effective_labels": flattenNetworkManagementConnectivityTestEffectiveLabels(original["labels"], d, config),
170+
"project": getDataFromName(original["name"], 1),
171+
})
172+
}
173+
return transformed
174+
}
175+
176+
func getDataFromName(v interface{}, part int) string {
177+
name := v.(string)
178+
split := strings.Split(name, "/")
179+
return split[part]
180+
}

0 commit comments

Comments
 (0)