Skip to content

Commit 780ee3b

Browse files
entertvlabd-goog
authored andcommitted
apigee: Added in-place update for consumer_accept_list field in google_apigee_instance (GoogleCloudPlatform#11479)
1 parent 27e3d3b commit 780ee3b

File tree

3 files changed

+208
-2
lines changed

3 files changed

+208
-2
lines changed

mmv1/products/apigee/Instance.yaml

+11-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ name: 'Instance'
1616
base_url: 'instances'
1717
create_url: '{{org_id}}/instances'
1818
self_link: '{{org_id}}/instances/{{name}}'
19+
create_verb: :POST
20+
update_verb: :PATCH
21+
update_mask: true
1922
async: !ruby/object:Api::OpAsync
2023
operation: !ruby/object:Api::OpAsync::Operation
2124
path: 'name'
@@ -33,7 +36,7 @@ async: !ruby/object:Api::OpAsync
3336
error: !ruby/object:Api::OpAsync::Error
3437
path: 'error'
3538
message: 'message'
36-
immutable: true
39+
immutable: false
3740
description: |
3841
An `Instance` is the runtime dataplane in Apigee.
3942
references: !ruby/object:Api::Resource::ReferenceLinks
@@ -131,6 +134,7 @@ examples:
131134
skip_vcr: true
132135
timeouts: !ruby/object:Api::Timeouts
133136
insert_minutes: 60
137+
update_minutes: 20
134138
delete_minutes: 60
135139
custom_code: !ruby/object:Provider::Terraform::CustomCode
136140
custom_import: templates/terraform/custom_import/apigee_instance.go.erb
@@ -150,17 +154,20 @@ properties:
150154
description: |
151155
Resource ID of the instance.
152156
required: true
157+
immutable: true
153158
- !ruby/object:Api::Type::String
154159
name: 'location'
155160
description: |
156161
Required. Compute Engine location where the instance resides.
157162
required: true
163+
immutable: true
158164
- !ruby/object:Api::Type::String
159165
name: 'peeringCidrRange'
160166
description: |
161167
The size of the CIDR block range that will be reserved by the instance. For valid values,
162168
see [CidrRange](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances#CidrRange) on the documentation.
163169
default_from_api: true
170+
immutable: true
164171
- !ruby/object:Api::Type::String
165172
name: 'ipRange'
166173
description: |
@@ -171,15 +178,18 @@ properties:
171178
available /22 CIDR block from Service Networking. The customer should use this CIDR block
172179
for configuring their firewall needs to allow traffic from Apigee.
173180
Input format: "a.b.c.d/22"
181+
immutable: true
174182
ignore_read: true
175183
- !ruby/object:Api::Type::String
176184
name: 'description'
177185
description: |
178186
Description of the instance.
187+
immutable: true
179188
- !ruby/object:Api::Type::String
180189
name: 'displayName'
181190
description: |
182191
Display name of the instance.
192+
immutable: true
183193
- !ruby/object:Api::Type::String
184194
name: 'diskEncryptionKeyName'
185195
description: |

mmv1/templates/terraform/examples/apigee_instance_service_attachment_basic_test.tf.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ resource "google_compute_forwarding_rule" "psc_ilb_consumer" {
6161
target = google_compute_service_attachment.psc_ilb_service_attachment.id
6262
load_balancing_scheme = "" # need to override EXTERNAL default when target is a service attachment
6363
network = "default"
64-
ip_address = google_compute_address.psc_ilb_consumer_address.address
64+
ip_address = google_compute_address.psc_ilb_consumer_address.id
6565

6666
project = google_project.project.project_id
6767
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
package apigee_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
7+
"github.com/hashicorp/terraform-provider-google/google/acctest"
8+
"github.com/hashicorp/terraform-provider-google/google/envvar"
9+
)
10+
11+
func TestAccApigeeInstance_updateConsumerAcceptList(t *testing.T) {
12+
acctest.SkipIfVcr(t)
13+
t.Parallel()
14+
15+
context := map[string]interface{}{
16+
"billing_account": envvar.GetTestBillingAccountFromEnv(t),
17+
"org_id": envvar.GetTestOrgFromEnv(t),
18+
"random_suffix_1": acctest.RandString(t, 10),
19+
"random_suffix_2": acctest.RandString(t, 10),
20+
}
21+
22+
acctest.VcrTest(t, resource.TestCase{
23+
PreCheck: func() { acctest.AccTestPreCheck(t) },
24+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
25+
CheckDestroy: testAccCheckApigeeInstanceDestroyProducer(t),
26+
Steps: []resource.TestStep{
27+
{
28+
Config: testAccApigeeInstance_basic(context),
29+
},
30+
{
31+
ResourceName: "google_apigee_instance.apigee_instance",
32+
ImportState: true,
33+
ImportStateVerify: true,
34+
ImportStateVerifyIgnore: []string{"ip_range", "org_id"},
35+
},
36+
{
37+
Config: testAccApigeeInstance_updateConsumerAcceptList(context),
38+
},
39+
{
40+
ResourceName: "google_apigee_instance.apigee_instance",
41+
ImportState: true,
42+
ImportStateVerify: true,
43+
ImportStateVerifyIgnore: []string{"ip_range", "org_id"},
44+
},
45+
},
46+
})
47+
}
48+
49+
func testAccApigeeInstance_basic(context map[string]interface{}) string {
50+
return acctest.Nprintf(`
51+
resource "google_project" "project1" {
52+
project_id = "tf-test%{random_suffix_1}"
53+
name = "tf-test%{random_suffix_1}"
54+
org_id = "%{org_id}"
55+
billing_account = "%{billing_account}"
56+
deletion_policy = "DELETE"
57+
}
58+
59+
resource "google_project_service" "apigee" {
60+
project = google_project.project1.project_id
61+
service = "apigee.googleapis.com"
62+
}
63+
64+
resource "google_project_service" "compute" {
65+
project = google_project.project1.project_id
66+
service = "compute.googleapis.com"
67+
}
68+
69+
resource "google_project_service" "servicenetworking" {
70+
project = google_project.project1.project_id
71+
service = "servicenetworking.googleapis.com"
72+
}
73+
74+
resource "google_compute_network" "apigee_network" {
75+
name = "apigee-network"
76+
project = google_project.project1.project_id
77+
depends_on = [google_project_service.compute]
78+
}
79+
80+
resource "google_compute_global_address" "apigee_range" {
81+
name = "apigee-range"
82+
purpose = "VPC_PEERING"
83+
address_type = "INTERNAL"
84+
prefix_length = 21
85+
network = google_compute_network.apigee_network.id
86+
project = google_project.project1.project_id
87+
}
88+
89+
resource "google_service_networking_connection" "apigee_vpc_connection" {
90+
network = google_compute_network.apigee_network.id
91+
service = "servicenetworking.googleapis.com"
92+
reserved_peering_ranges = [google_compute_global_address.apigee_range.name]
93+
depends_on = [google_project_service.servicenetworking]
94+
}
95+
96+
resource "google_apigee_organization" "apigee_org" {
97+
analytics_region = "us-central1"
98+
project_id = google_project.project1.project_id
99+
authorized_network = google_compute_network.apigee_network.id
100+
billing_type = "EVALUATION"
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_1}"
109+
location = "us-central1"
110+
org_id = google_apigee_organization.apigee_org.id
111+
ip_range = "${google_compute_global_address.apigee_range.address}/22"
112+
consumer_accept_list = [
113+
google_project.project1.project_id,
114+
]
115+
}
116+
`, context)
117+
}
118+
119+
func testAccApigeeInstance_updateConsumerAcceptList(context map[string]interface{}) string {
120+
return acctest.Nprintf(`
121+
resource "google_project" "project1" {
122+
project_id = "tf-test%{random_suffix_1}"
123+
name = "tf-test%{random_suffix_1}"
124+
org_id = "%{org_id}"
125+
billing_account = "%{billing_account}"
126+
deletion_policy = "DELETE"
127+
}
128+
129+
resource "google_project" "project2" {
130+
project_id = "tf-test%{random_suffix_2}"
131+
name = "tf-test%{random_suffix_2}"
132+
org_id = "%{org_id}"
133+
billing_account = "%{billing_account}"
134+
deletion_policy = "DELETE"
135+
}
136+
137+
resource "google_project_service" "apigee" {
138+
project = google_project.project1.project_id
139+
service = "apigee.googleapis.com"
140+
}
141+
142+
resource "google_project_service" "compute" {
143+
project = google_project.project1.project_id
144+
service = "compute.googleapis.com"
145+
}
146+
147+
resource "google_project_service" "servicenetworking" {
148+
project = google_project.project1.project_id
149+
service = "servicenetworking.googleapis.com"
150+
}
151+
152+
resource "google_compute_network" "apigee_network" {
153+
name = "apigee-network"
154+
project = google_project.project1.project_id
155+
depends_on = [google_project_service.compute]
156+
}
157+
158+
resource "google_compute_global_address" "apigee_range" {
159+
name = "apigee-range"
160+
purpose = "VPC_PEERING"
161+
address_type = "INTERNAL"
162+
prefix_length = 21
163+
network = google_compute_network.apigee_network.id
164+
project = google_project.project1.project_id
165+
}
166+
167+
resource "google_service_networking_connection" "apigee_vpc_connection" {
168+
network = google_compute_network.apigee_network.id
169+
service = "servicenetworking.googleapis.com"
170+
reserved_peering_ranges = [google_compute_global_address.apigee_range.name]
171+
depends_on = [google_project_service.servicenetworking]
172+
}
173+
174+
resource "google_apigee_organization" "apigee_org" {
175+
analytics_region = "us-central1"
176+
project_id = google_project.project1.project_id
177+
authorized_network = google_compute_network.apigee_network.id
178+
billing_type = "EVALUATION"
179+
depends_on = [
180+
google_service_networking_connection.apigee_vpc_connection,
181+
google_project_service.apigee,
182+
]
183+
}
184+
185+
resource "google_apigee_instance" "apigee_instance" {
186+
name = "tf-test%{random_suffix_1}"
187+
location = "us-central1"
188+
org_id = google_apigee_organization.apigee_org.id
189+
ip_range = "${google_compute_global_address.apigee_range.address}/22"
190+
consumer_accept_list = [
191+
google_project.project1.project_id,
192+
google_project.project2.project_id,
193+
]
194+
}
195+
`, context)
196+
}

0 commit comments

Comments
 (0)