Apigee module and blueprint
This commit is contained in:
@@ -14,12 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
variable "analytics_region" {
|
||||
type = string
|
||||
default = "europe-west1"
|
||||
}
|
||||
|
||||
variable "network" {
|
||||
type = string
|
||||
default = "apigee-vpc"
|
||||
module "test" {
|
||||
source = "../../../../modules/apigee"
|
||||
project_id = var.project_id
|
||||
organization = var.organization
|
||||
envgroups = var.envgroups
|
||||
environments = var.environments
|
||||
instances = var.instances
|
||||
}
|
||||
41
tests/modules/apigee/fixture/test.all.tfvars
Normal file
41
tests/modules/apigee/fixture/test.all.tfvars
Normal file
@@ -0,0 +1,41 @@
|
||||
project_id = "my-project"
|
||||
organization = {
|
||||
display_name = "My Organization"
|
||||
description = "My Organization"
|
||||
authorized_network = "my-vpc"
|
||||
runtime_type = "CLOUD"
|
||||
billing_type = "Pay-as-you-go"
|
||||
database_encryption_key = "123456789"
|
||||
analytics_region = "europe-west1"
|
||||
}
|
||||
envgroups = {
|
||||
test = ["test.example.com"]
|
||||
prod = ["prod.example.com"]
|
||||
}
|
||||
environments = {
|
||||
apis-test = {
|
||||
display_name = "APIs test"
|
||||
description = "APIs Test"
|
||||
envgroups = ["test"]
|
||||
}
|
||||
apis-prod = {
|
||||
display_name = "APIs prod"
|
||||
description = "APIs prod"
|
||||
envgroups = ["prod"]
|
||||
iam = {
|
||||
"roles/viewer" = ["group:devops@myorg.com"]
|
||||
}
|
||||
}
|
||||
}
|
||||
instances = {
|
||||
instance-test-ew1 = {
|
||||
region = "europe-west1"
|
||||
environments = ["apis-test"]
|
||||
psa_ip_cidr_range = "10.0.4.0/22"
|
||||
}
|
||||
instance-prod-ew1 = {
|
||||
region = "europe-west1"
|
||||
environments = ["apis-prod"]
|
||||
psa_ip_cidr_range = "10.0.4.0/22"
|
||||
}
|
||||
}
|
||||
8
tests/modules/apigee/fixture/test.env_only.tfvars
Normal file
8
tests/modules/apigee/fixture/test.env_only.tfvars
Normal file
@@ -0,0 +1,8 @@
|
||||
project_id = "my-project"
|
||||
environments = {
|
||||
apis-test = {
|
||||
display_name = "APIs test"
|
||||
description = "APIs Test"
|
||||
envgroups = ["test"]
|
||||
}
|
||||
}
|
||||
4
tests/modules/apigee/fixture/test.envgroup_only.tfvars
Normal file
4
tests/modules/apigee/fixture/test.envgroup_only.tfvars
Normal file
@@ -0,0 +1,4 @@
|
||||
project_id = "my-project"
|
||||
envgroups = {
|
||||
test = ["test.example.com"]
|
||||
}
|
||||
8
tests/modules/apigee/fixture/test.instance_only.tfvars
Normal file
8
tests/modules/apigee/fixture/test.instance_only.tfvars
Normal file
@@ -0,0 +1,8 @@
|
||||
project_id = "my-project"
|
||||
instances = {
|
||||
instance-test-ew1 = {
|
||||
region = "europe-west1"
|
||||
environments = ["apis-test"]
|
||||
psa_ip_cidr_range = "10.0.4.0/22"
|
||||
}
|
||||
}
|
||||
26
tests/modules/apigee/fixture/test.no_instances.tfvars
Normal file
26
tests/modules/apigee/fixture/test.no_instances.tfvars
Normal file
@@ -0,0 +1,26 @@
|
||||
project_id = "my-project"
|
||||
organization = {
|
||||
display_name = "My Organization"
|
||||
description = "My Organization"
|
||||
authorized_network = "my-vpc"
|
||||
runtime_type = "CLOUD"
|
||||
billing_type = "PAYG"
|
||||
database_encryption_key = "123456789"
|
||||
analytics_region = "europe-west1"
|
||||
}
|
||||
envgroups = {
|
||||
test = ["test.example.com"]
|
||||
prod = ["prod.example.com"]
|
||||
}
|
||||
environments = {
|
||||
apis-test = {
|
||||
display_name = "APIs test"
|
||||
description = "APIs Test"
|
||||
envgroups = ["test"]
|
||||
}
|
||||
apis-prod = {
|
||||
display_name = "APIs prod"
|
||||
description = "APIs prod"
|
||||
envgroups = ["prod"]
|
||||
}
|
||||
}
|
||||
10
tests/modules/apigee/fixture/test.organization_only.tfvars
Normal file
10
tests/modules/apigee/fixture/test.organization_only.tfvars
Normal file
@@ -0,0 +1,10 @@
|
||||
project_id = "my-project"
|
||||
organization = {
|
||||
display_name = "My Organization"
|
||||
description = "My Organization"
|
||||
authorized_network = "my-vpc"
|
||||
runtime_type = "CLOUD"
|
||||
billing_type = "PAYG"
|
||||
database_encryption_key = "123456789"
|
||||
analytics_region = "europe-west1"
|
||||
}
|
||||
70
tests/modules/apigee/fixture/variables.tf
Normal file
70
tests/modules/apigee/fixture/variables.tf
Normal file
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright 2022 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
variable "project_id" {
|
||||
description = "Project ID."
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "organization" {
|
||||
description = "Apigee organization"
|
||||
type = object({
|
||||
display_name = optional(string)
|
||||
description = optional(string, "Apigee Organization created by tf module")
|
||||
authorized_network = optional(string)
|
||||
runtime_type = optional(string, "CLOUD")
|
||||
billing_type = optional(string)
|
||||
database_encryption_key = optional(string)
|
||||
analytics_region = optional(string, "europe-west1")
|
||||
})
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "envgroups" {
|
||||
description = "Environment groups (NAME => [HOSTNAMES])."
|
||||
type = map(list(string))
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "environments" {
|
||||
description = "Environments."
|
||||
type = map(object({
|
||||
display_name = optional(string)
|
||||
description = optional(string)
|
||||
node_config = optional(object({
|
||||
min_node_count = optional(number)
|
||||
max_node_count = optional(number)
|
||||
current_aggregate_node_count = number
|
||||
}))
|
||||
iam = optional(map(list(string)))
|
||||
envgroups = list(string)
|
||||
}))
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "instances" {
|
||||
description = "Instance."
|
||||
type = map(object({
|
||||
display_name = optional(string)
|
||||
description = optional(string)
|
||||
region = string
|
||||
environments = list(string)
|
||||
psa_ip_cidr_range = string
|
||||
disk_encryption_key = optional(string)
|
||||
consumer_accept_list = optional(list(string))
|
||||
}))
|
||||
default = null
|
||||
}
|
||||
74
tests/modules/apigee/test_plan.py
Normal file
74
tests/modules/apigee/test_plan.py
Normal file
@@ -0,0 +1,74 @@
|
||||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import collections
|
||||
|
||||
def test_all(plan_runner):
|
||||
"Test that creates all resources."
|
||||
_, resources = plan_runner(tf_var_file='test.all.tfvars')
|
||||
counts = collections.Counter(f'{r["type"]}.{r["name"]}' for r in resources)
|
||||
assert counts == {
|
||||
'google_apigee_organization.organization': 1,
|
||||
'google_apigee_envgroup.envgroups': 2,
|
||||
'google_apigee_environment.environments': 2,
|
||||
'google_apigee_envgroup_attachment.envgroup_attachments': 2,
|
||||
'google_apigee_instance.instances': 2,
|
||||
'google_apigee_instance_attachment.instance_attachments': 2,
|
||||
'google_apigee_environment_iam_binding.binding': 1
|
||||
}
|
||||
|
||||
def test_organization_only(plan_runner):
|
||||
"Test that creates only an organization."
|
||||
_, resources = plan_runner(tf_var_file='test.organization_only.tfvars')
|
||||
counts = collections.Counter(f'{r["type"]}.{r["name"]}' for r in resources)
|
||||
assert counts == {
|
||||
'google_apigee_organization.organization': 1
|
||||
}
|
||||
|
||||
def test_envgroup_only(plan_runner):
|
||||
"Test that creates only an environment group in an existing organization."
|
||||
_, resources = plan_runner(tf_var_file='test.envgroup_only.tfvars')
|
||||
counts = collections.Counter(f'{r["type"]}.{r["name"]}' for r in resources)
|
||||
assert counts == {
|
||||
'google_apigee_envgroup.envgroups': 1,
|
||||
}
|
||||
|
||||
def test_env_only(plan_runner):
|
||||
"Test that creates an environment in an existing environment group."
|
||||
_, resources = plan_runner(tf_var_file='test.env_only.tfvars')
|
||||
counts = collections.Counter(f'{r["type"]}.{r["name"]}' for r in resources)
|
||||
assert counts == {
|
||||
'google_apigee_environment.environments': 1,
|
||||
'google_apigee_envgroup_attachment.envgroup_attachments': 1,
|
||||
}
|
||||
|
||||
def test_instance_only(plan_runner):
|
||||
"Test that creates only an instance."
|
||||
_, resources = plan_runner(tf_var_file='test.instance_only.tfvars')
|
||||
counts = collections.Counter(f'{r["type"]}.{r["name"]}' for r in resources)
|
||||
assert counts == {
|
||||
'google_apigee_instance.instances': 1,
|
||||
'google_apigee_instance_attachment.instance_attachments': 1
|
||||
}
|
||||
|
||||
def test_no_instances(plan_runner):
|
||||
"Test that creates everything but the instances."
|
||||
_, resources = plan_runner(tf_var_file='test.no_instances.tfvars')
|
||||
counts = collections.Counter(f'{r["type"]}.{r["name"]}' for r in resources)
|
||||
assert counts == {
|
||||
'google_apigee_organization.organization': 1,
|
||||
'google_apigee_envgroup.envgroups': 2,
|
||||
'google_apigee_environment.environments': 2,
|
||||
'google_apigee_envgroup_attachment.envgroup_attachments': 2,
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
/**
|
||||
* Copyright 2022 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
module "test" {
|
||||
source = "../../../../modules/apigee-organization"
|
||||
project_id = "my-project"
|
||||
analytics_region = var.analytics_region
|
||||
runtime_type = "CLOUD"
|
||||
billing_type = "EVALUATION"
|
||||
authorized_network = var.network
|
||||
apigee_environments = {
|
||||
eval1 = {
|
||||
api_proxy_type = "PROGRAMMABLE"
|
||||
deployment_type = "PROXY"
|
||||
}
|
||||
eval2 = {
|
||||
api_proxy_type = "CONFIGURABLE"
|
||||
deployment_type = "ARCHIVE"
|
||||
}
|
||||
eval3 = {}
|
||||
}
|
||||
apigee_envgroups = {
|
||||
eval = {
|
||||
environments = [
|
||||
"eval1",
|
||||
"eval2"
|
||||
]
|
||||
hostnames = [
|
||||
"eval.api.example.com"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def resources(plan_runner):
|
||||
_, resources = plan_runner()
|
||||
return resources
|
||||
|
||||
|
||||
def test_resource_count(resources):
|
||||
"Test number of resources created."
|
||||
assert len(resources) == 7
|
||||
|
||||
|
||||
def test_envgroup_attachment(resources):
|
||||
"Test Apigee Envgroup Attachments."
|
||||
attachments = [r['values'] for r in resources if r['type']
|
||||
== 'google_apigee_envgroup_attachment']
|
||||
assert len(attachments) == 2
|
||||
assert set(a['environment'] for a in attachments) == set(['eval1', 'eval2'])
|
||||
|
||||
|
||||
def test_envgroup(resources):
|
||||
"Test env group."
|
||||
envgroups = [r['values'] for r in resources if r['type']
|
||||
== 'google_apigee_envgroup']
|
||||
assert len(envgroups) == 1
|
||||
assert envgroups[0]['name'] == 'eval'
|
||||
assert len(envgroups[0]['hostnames']) == 1
|
||||
assert envgroups[0]['hostnames'][0] == 'eval.api.example.com'
|
||||
|
||||
|
||||
def test_env(resources):
|
||||
"Test environments."
|
||||
envs = [r['values'] for r in resources if r['type']
|
||||
== 'google_apigee_environment']
|
||||
assert len(envs) == 3
|
||||
assert envs[0]['name'] == 'eval1'
|
||||
assert envs[0]['api_proxy_type'] == 'PROGRAMMABLE'
|
||||
assert envs[0]['deployment_type'] == 'PROXY'
|
||||
assert envs[1]['name'] == 'eval2'
|
||||
assert envs[1]['api_proxy_type'] == 'CONFIGURABLE'
|
||||
assert envs[1]['deployment_type'] == 'ARCHIVE'
|
||||
assert envs[2]['name'] == 'eval3'
|
||||
assert envs[2]['api_proxy_type'] == 'API_PROXY_TYPE_UNSPECIFIED'
|
||||
assert envs[2]['deployment_type'] == 'DEPLOYMENT_TYPE_UNSPECIFIED'
|
||||
@@ -1,13 +0,0 @@
|
||||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
@@ -1,32 +0,0 @@
|
||||
/**
|
||||
* Copyright 2022 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
module "apigee-x-instance" {
|
||||
source = "../../../../modules/apigee-x-instance"
|
||||
name = var.name
|
||||
region = var.region
|
||||
ip_range = var.ip_range
|
||||
|
||||
apigee_org_id = "my-project"
|
||||
apigee_environments = [
|
||||
"eval1",
|
||||
"eval2"
|
||||
]
|
||||
consumer_accept_list = [
|
||||
"project1",
|
||||
"project2"
|
||||
]
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
/**
|
||||
* Copyright 2022 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
variable "name" {
|
||||
type = string
|
||||
default = "my-test-instance"
|
||||
}
|
||||
|
||||
variable "region" {
|
||||
type = string
|
||||
default = "europe-west1"
|
||||
}
|
||||
|
||||
variable "ip_range" {
|
||||
type = string
|
||||
default = "10.0.0.0/22,10.1.0.0/28"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
# Copyright 2022 Google LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def resources(plan_runner):
|
||||
_, resources = plan_runner()
|
||||
return resources
|
||||
|
||||
|
||||
def test_resource_count(resources):
|
||||
"Test number of resources created."
|
||||
assert len(resources) == 3
|
||||
|
||||
|
||||
def test_instance_attachment(resources):
|
||||
"Test Apigee Instance Attachments."
|
||||
attachments = [
|
||||
r['values']
|
||||
for r in resources
|
||||
if r['type'] == 'google_apigee_instance_attachment'
|
||||
]
|
||||
assert len(attachments) == 2
|
||||
assert set(a['environment'] for a in attachments) == set(['eval1', 'eval2'])
|
||||
|
||||
|
||||
def test_instance(resources):
|
||||
"Test Instance."
|
||||
instances = [
|
||||
r['values'] for r in resources if r['type'] == 'google_apigee_instance'
|
||||
]
|
||||
assert len(instances) == 1
|
||||
assert instances[0]['ip_range'] == '10.0.0.0/22,10.1.0.0/28'
|
||||
assert instances[0]['name'] == 'my-test-instance'
|
||||
assert instances[0]['location'] == 'europe-west1'
|
||||
|
||||
|
||||
def test_instance_consumer_accept_list(resources):
|
||||
instances = [
|
||||
r['values'] for r in resources if r['type'] == 'google_apigee_instance'
|
||||
]
|
||||
assert instances[0]['consumer_accept_list'] == ['project1', 'project2']
|
||||
Reference in New Issue
Block a user