Skip to content

Commit 4aa1b09

Browse files
fix(apigee): Error of update in google_apigee_developer (#12347) (#8728)
[upstream:5be6d053f6eecef46df4739bb57660321f7eb0aa] Signed-off-by: Modular Magician <[email protected]>
1 parent 9eeb35a commit 4aa1b09

File tree

3 files changed

+142
-45
lines changed

3 files changed

+142
-45
lines changed

Diff for: .changelog/12347.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
apigee: fixed error of update in `google_apigee_developer` resource
3+
```

Diff for: google-beta/services/apigee/resource_apigee_developer.go

+14-45
Original file line numberDiff line numberDiff line change
@@ -311,58 +311,27 @@ func resourceApigeeDeveloperUpdate(d *schema.ResourceData, meta interface{}) err
311311

312312
log.Printf("[DEBUG] Updating Developer %q: %#v", d.Id(), obj)
313313
headers := make(http.Header)
314-
updateMask := []string{}
315-
316-
if d.HasChange("email") {
317-
updateMask = append(updateMask, "email")
318-
}
319-
320-
if d.HasChange("first_name") {
321-
updateMask = append(updateMask, "firstName")
322-
}
323-
324-
if d.HasChange("last_name") {
325-
updateMask = append(updateMask, "lastName")
326-
}
327-
328-
if d.HasChange("user_name") {
329-
updateMask = append(updateMask, "userName")
330-
}
331-
332-
if d.HasChange("attributes") {
333-
updateMask = append(updateMask, "attributes")
334-
}
335-
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
336-
// won't set it
337-
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
338-
if err != nil {
339-
return err
340-
}
341314

342315
// err == nil indicates that the billing_project value was found
343316
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
344317
billingProject = bp
345318
}
346319

347-
// if updateMask is empty we are not updating anything so skip the post
348-
if len(updateMask) > 0 {
349-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
350-
Config: config,
351-
Method: "PUT",
352-
Project: billingProject,
353-
RawURL: url,
354-
UserAgent: userAgent,
355-
Body: obj,
356-
Timeout: d.Timeout(schema.TimeoutUpdate),
357-
Headers: headers,
358-
})
359-
360-
if err != nil {
361-
return fmt.Errorf("Error updating Developer %q: %s", d.Id(), err)
362-
} else {
363-
log.Printf("[DEBUG] Finished updating Developer %q: %#v", d.Id(), res)
364-
}
320+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
321+
Config: config,
322+
Method: "PUT",
323+
Project: billingProject,
324+
RawURL: url,
325+
UserAgent: userAgent,
326+
Body: obj,
327+
Timeout: d.Timeout(schema.TimeoutUpdate),
328+
Headers: headers,
329+
})
365330

331+
if err != nil {
332+
return fmt.Errorf("Error updating Developer %q: %s", d.Id(), err)
333+
} else {
334+
log.Printf("[DEBUG] Finished updating Developer %q: %#v", d.Id(), res)
366335
}
367336

368337
return resourceApigeeDeveloperRead(d, meta)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package apigee_test
4+
5+
import (
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
10+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
11+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/envvar"
12+
)
13+
14+
func TestAccApigeeDeveloper_apigeeDeveloperUpdateTest(t *testing.T) {
15+
t.Parallel()
16+
17+
context := map[string]interface{}{
18+
"billing_account": envvar.GetTestBillingAccountFromEnv(t),
19+
"org_id": envvar.GetTestOrgFromEnv(t),
20+
"random_suffix": acctest.RandString(t, 10),
21+
}
22+
23+
acctest.VcrTest(t, resource.TestCase{
24+
PreCheck: func() { acctest.AccTestPreCheck(t) },
25+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
26+
CheckDestroy: testAccCheckApigeeDeveloperDestroyProducer(t),
27+
Steps: []resource.TestStep{
28+
{
29+
Config: testAccApigeeDeveloper_apigeeDeveloperBasicTestExample(context),
30+
},
31+
{
32+
ResourceName: "google_apigee_developer.apigee_developer",
33+
ImportState: true,
34+
ImportStateVerify: true,
35+
ImportStateVerifyIgnore: []string{"org_id"},
36+
},
37+
{
38+
Config: testAccApigeeDeveloper_apigeeDeveloperUpdateTest(context),
39+
},
40+
{
41+
ResourceName: "google_apigee_developer.apigee_developer",
42+
ImportState: true,
43+
ImportStateVerify: true,
44+
ImportStateVerifyIgnore: []string{"org_id"},
45+
},
46+
},
47+
})
48+
}
49+
50+
func testAccApigeeDeveloper_apigeeDeveloperUpdateTest(context map[string]interface{}) string {
51+
return acctest.Nprintf(`
52+
resource "google_project" "project" {
53+
project_id = "tf-test%{random_suffix}"
54+
name = "tf-test%{random_suffix}"
55+
org_id = "%{org_id}"
56+
billing_account = "%{billing_account}"
57+
deletion_policy = "DELETE"
58+
}
59+
60+
resource "google_project_service" "apigee" {
61+
project = google_project.project.project_id
62+
service = "apigee.googleapis.com"
63+
}
64+
65+
resource "google_project_service" "compute" {
66+
project = google_project.project.project_id
67+
service = "compute.googleapis.com"
68+
}
69+
70+
resource "google_project_service" "servicenetworking" {
71+
project = google_project.project.project_id
72+
service = "servicenetworking.googleapis.com"
73+
}
74+
75+
resource "google_compute_network" "apigee_network" {
76+
name = "apigee-network"
77+
project = google_project.project.project_id
78+
depends_on = [google_project_service.compute]
79+
}
80+
81+
resource "google_compute_global_address" "apigee_range" {
82+
name = "apigee-range"
83+
purpose = "VPC_PEERING"
84+
address_type = "INTERNAL"
85+
prefix_length = 16
86+
network = google_compute_network.apigee_network.id
87+
project = google_project.project.project_id
88+
}
89+
90+
resource "google_service_networking_connection" "apigee_vpc_connection" {
91+
network = google_compute_network.apigee_network.id
92+
service = "servicenetworking.googleapis.com"
93+
reserved_peering_ranges = [google_compute_global_address.apigee_range.name]
94+
depends_on = [google_project_service.servicenetworking]
95+
}
96+
97+
resource "google_apigee_organization" "apigee_org" {
98+
analytics_region = "us-central1"
99+
project_id = google_project.project.project_id
100+
authorized_network = google_compute_network.apigee_network.id
101+
depends_on = [
102+
google_service_networking_connection.apigee_vpc_connection,
103+
google_project_service.apigee,
104+
]
105+
}
106+
107+
resource "google_apigee_instance" "apigee_instance" {
108+
name = "tf-test%{random_suffix}"
109+
location = "us-central1"
110+
org_id = google_apigee_organization.apigee_org.id
111+
peering_cidr_range = "SLASH_22"
112+
}
113+
114+
resource "google_apigee_developer" "apigee_developer" {
115+
email = "tf-test%{random_suffix}@acme.com"
116+
first_name = "Yamada"
117+
last_name = "Taro"
118+
user_name = "yamada.taro"
119+
org_id = google_apigee_organization.apigee_org.id
120+
depends_on = [
121+
google_apigee_instance.apigee_instance
122+
]
123+
}
124+
`, context)
125+
}

0 commit comments

Comments
 (0)