Skip to content

Commit 6836029

Browse files
Terraform Team AutomationMeharwadeDivya
authored andcommitted
Added - Support for API Gateway Dynamic Routing
1 parent f81a30b commit 6836029

9 files changed

+912
-137
lines changed
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
variable "tenancy_ocid" {
5+
}
6+
7+
variable "user_ocid" {
8+
}
9+
10+
variable "fingerprint" {
11+
}
12+
13+
variable "private_key_path" {
14+
}
15+
16+
variable "region" {
17+
}
18+
19+
variable "compartment_ocid" {
20+
}
21+
22+
variable "gateway_endpoint_type" {
23+
default = "PRIVATE"
24+
}
25+
26+
variable "gateway_state" {
27+
default = "ACTIVE"
28+
}
29+
30+
variable "deployment_path_prefix" {
31+
default = "/v1"
32+
}
33+
34+
variable "deployment_specification_routes_backend_type" {
35+
default = "DYNAMIC_ROUTING_BACKEND"
36+
}
37+
38+
variable "deployment_specification_routes_backend_" {
39+
default = "DYNAMIC_ROUTING_BACKEND"
40+
}
41+
42+
variable "deployment_specification_routes_methods" {
43+
default = ["GET"]
44+
}
45+
46+
variable "deployment_specification_routes_path" {
47+
default = "/hello"
48+
}
49+
50+
variable "deployment_state" {
51+
default = "ACTIVE"
52+
}
53+
54+
variable "deployment_specification_routes_backend_selection_source_type" {
55+
default = "SINGLE"
56+
}
57+
58+
variable "deployment_specification_routes_backend_selection_source_selector" {
59+
default = "request.headers[route]"
60+
}
61+
62+
variable "deployment_specification_routes_backend_routing_backends_key_type" {
63+
default = "ANY_OF"
64+
}
65+
66+
variable "deployment_specification_routes_backend_routing_backends_key_values" {
67+
default = ["test", "def"]
68+
}
69+
70+
variable "deployment_specification_routes_backend_routing_backends_key_name" {
71+
default = "key1"
72+
}
73+
74+
variable "deployment_specification_routes_backend_routing_backends_backend_type" {
75+
default = "HTTP_BACKEND"
76+
}
77+
78+
variable "deployment_specification_routes_backend_routing_backends_backend_url" {
79+
default = "https://api.weather.gov"
80+
}
81+
82+
provider "oci" {
83+
tenancy_ocid = var.tenancy_ocid
84+
user_ocid = var.user_ocid
85+
fingerprint = var.fingerprint
86+
private_key_path = var.private_key_path
87+
region = var.region
88+
}
89+
90+
resource "oci_core_subnet" "regional_subnet" {
91+
cidr_block = "10.0.1.0/24"
92+
display_name = "regionalSubnet"
93+
dns_label = "regionalsubnet"
94+
compartment_id = var.compartment_ocid
95+
vcn_id = oci_core_vcn.vcn1.id
96+
security_list_ids = [oci_core_vcn.vcn1.default_security_list_id]
97+
route_table_id = oci_core_vcn.vcn1.default_route_table_id
98+
dhcp_options_id = oci_core_vcn.vcn1.default_dhcp_options_id
99+
}
100+
101+
data "oci_identity_availability_domain" "ad" {
102+
compartment_id = var.tenancy_ocid
103+
ad_number = 1
104+
}
105+
106+
resource "oci_core_vcn" "vcn1" {
107+
cidr_block = "10.0.0.0/16"
108+
compartment_id = var.compartment_ocid
109+
display_name = "exampleVCN"
110+
dns_label = "tfexamplevcn"
111+
}
112+
113+
resource "oci_apigateway_gateway" "test_gateway" {
114+
#Required
115+
compartment_id = var.compartment_ocid
116+
endpoint_type = var.gateway_endpoint_type
117+
subnet_id = oci_core_subnet.regional_subnet.id
118+
}
119+
120+
resource "oci_apigateway_deployment" "test_deployment" {
121+
#Required
122+
compartment_id = var.compartment_ocid
123+
gateway_id = oci_apigateway_gateway.test_gateway.id
124+
path_prefix = var.deployment_path_prefix
125+
126+
specification {
127+
routes {
128+
#Required
129+
backend {
130+
#Required
131+
type = var.deployment_specification_routes_backend_type
132+
selection_source {
133+
type = var.deployment_specification_routes_backend_selection_source_type
134+
selector = var.deployment_specification_routes_backend_selection_source_selector
135+
}
136+
routing_backends {
137+
key {
138+
type = var.deployment_specification_routes_backend_routing_backends_key_type
139+
values = var.deployment_specification_routes_backend_routing_backends_key_values
140+
name = var.deployment_specification_routes_backend_routing_backends_key_name
141+
}
142+
backend {
143+
type = var.deployment_specification_routes_backend_routing_backends_backend_type
144+
url = var.deployment_specification_routes_backend_routing_backends_backend_url
145+
}
146+
}
147+
}
148+
path = var.deployment_specification_routes_path
149+
methods = var.deployment_specification_routes_methods
150+
}
151+
}
152+
}
153+
154+
data "oci_apigateway_gateways" "test_gateways" {
155+
#Required
156+
compartment_id = var.compartment_ocid
157+
158+
#Optional
159+
state = var.gateway_state
160+
}
161+
162+
data "oci_apigateway_deployments" "test_deployments" {
163+
#Required
164+
compartment_id = var.compartment_ocid
165+
166+
#Optional
167+
gateway_id = oci_apigateway_gateway.test_gateway.id
168+
state = var.deployment_state
169+
}
170+

internal/integrationtest/apigateway_deployment_resource_test.go

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,21 @@ func TestResourceApigatewayDeploymentResourceJwt_basic(t *testing.T) {
132132
resource.TestCheckResourceAttr(resourceName, "specification.0.request_policies.0.rate_limiting.0.rate_key", "CLIENT_IP"),
133133
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.#", "1"),
134134
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.#", "1"),
135-
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.connect_timeout_in_seconds"),
136-
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.is_ssl_verify_disabled", "false"),
137-
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.read_timeout_in_seconds"),
138-
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.send_timeout_in_seconds"),
139-
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.type", "HTTP_BACKEND"),
140-
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.url", "https://api.weather.gov"),
135+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.#", "1"),
136+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.#", "1"),
137+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.type", "ANY_OF"),
138+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.values.#", "2"),
139+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.name", "key1"),
140+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.#", "1"),
141+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.type", "HTTP_BACKEND"),
142+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.url", "https://api.weather.gov"),
143+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.is_ssl_verify_disabled", "false"),
144+
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.connect_timeout_in_seconds"),
145+
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.read_timeout_in_seconds"),
146+
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.send_timeout_in_seconds"),
147+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.selection_source.#", "1"),
148+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.selection_source.0.selector", "request.headers[route]"),
149+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.selection_source.0.type", "SINGLE"),
141150
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.logging_policies.#", "1"),
142151
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.logging_policies.0.access_log.#", "1"),
143152
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.logging_policies.0.access_log.0.is_enabled", "false"),
@@ -220,12 +229,17 @@ func TestResourceApigatewayDeploymentResourceJwt_basic(t *testing.T) {
220229
resource.TestCheckResourceAttr(resourceName, "specification.0.request_policies.0.rate_limiting.0.rate_key", "TOTAL"),
221230
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.#", "1"),
222231
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.#", "1"),
223-
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.connect_timeout_in_seconds"),
224-
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.is_ssl_verify_disabled", "false"),
225-
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.read_timeout_in_seconds"),
226-
resource.TestCheckResourceAttrSet(resourceName, "specification.0.routes.0.backend.0.send_timeout_in_seconds"),
227-
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.type", "HTTP_BACKEND"),
228-
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.url", "https://www.oracle.com"),
232+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.#", "1"),
233+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.#", "1"),
234+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.type", "ANY_OF"),
235+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.values.#", "1"),
236+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.name", "key2"),
237+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.#", "1"),
238+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.type", "HTTP_BACKEND"),
239+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.url", "https://www.oracle.com"),
240+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.selection_source.#", "1"),
241+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.selection_source.0.selector", "request.subdomain[oracle.com]"),
242+
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.backend.0.selection_source.0.type", "SINGLE"),
229243
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.logging_policies.#", "1"),
230244
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.logging_policies.0.access_log.#", "1"),
231245
resource.TestCheckResourceAttr(resourceName, "specification.0.routes.0.logging_policies.0.access_log.0.is_enabled", "true"),
@@ -331,12 +345,17 @@ func TestResourceApigatewayDeploymentResourceJwt_basic(t *testing.T) {
331345
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.request_policies.0.rate_limiting.0.rate_key", "TOTAL"),
332346
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.#", "1"),
333347
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.#", "1"),
334-
resource.TestCheckResourceAttrSet(singularDatasourceName, "specification.0.routes.0.backend.0.connect_timeout_in_seconds"),
335-
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.is_ssl_verify_disabled", "false"),
336-
resource.TestCheckResourceAttrSet(singularDatasourceName, "specification.0.routes.0.backend.0.read_timeout_in_seconds"),
337-
resource.TestCheckResourceAttrSet(singularDatasourceName, "specification.0.routes.0.backend.0.send_timeout_in_seconds"),
338-
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.type", "HTTP_BACKEND"),
339-
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.url", "https://www.oracle.com"),
348+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.#", "1"),
349+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.#", "1"),
350+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.type", "ANY_OF"),
351+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.values.#", "1"),
352+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.key.0.name", "key2"),
353+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.#", "1"),
354+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.type", "HTTP_BACKEND"),
355+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.routing_backends.0.backend.0.url", "https://www.oracle.com"),
356+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.selection_source.#", "1"),
357+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.selection_source.0.selector", "request.subdomain[oracle.com]"),
358+
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.backend.0.selection_source.0.type", "SINGLE"),
340359
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.logging_policies.#", "1"),
341360
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.logging_policies.0.access_log.#", "1"),
342361
resource.TestCheckResourceAttr(singularDatasourceName, "specification.0.routes.0.logging_policies.0.access_log.0.is_enabled", "true"),

0 commit comments

Comments
 (0)