Update project module to v4.0.0, update test framework module to v1.0.1

* update project module to v4.0.0

* bump tftest version in test requirements file

* update plan test fixture to new syntax

* fix foundations/environments tests

* fix foundations/business-units tests

* fix infrastructure/shared-vpc tests
This commit is contained in:
Ludovico Magnocavallo
2019-10-30 22:21:15 +01:00
committed by GitHub
parent ed65051982
commit fd0704670d
11 changed files with 34 additions and 33 deletions

View File

@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# TODO(averbukh): simplify log-sink parameters once https://github.com/terraform-google-modules/terraform-google-log-export/issues/28 is done. # TODO(averbukh): simplify log-sink parameters once https://github.com/terraform-google-modules/terraform-google-log-export/issues/28 is done.
locals { locals {
parent_numeric_id = element(split("/", var.root_node), 1) parent_numeric_id = element(split("/", var.root_node), 1)
@@ -39,7 +39,7 @@ module "shared-folder" {
module "project-tf" { module "project-tf" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.2.0" version = "4.0.0"
parent = module.shared-folder.id parent = module.shared-folder.id
billing_account = var.billing_account_id billing_account = var.billing_account_id
prefix = var.prefix prefix = var.prefix
@@ -138,7 +138,7 @@ module "business-unit-3-folders" {
module "project-audit" { module "project-audit" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.2.0" version = "4.0.0"
parent = module.shared-folder.id parent = module.shared-folder.id
billing_account = var.billing_account_id billing_account = var.billing_account_id
prefix = var.prefix prefix = var.prefix
@@ -180,7 +180,7 @@ module "log-sink-audit" {
module "project-shared-resources" { module "project-shared-resources" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.2.0" version = "4.0.0"
parent = module.shared-folder.id parent = module.shared-folder.id
billing_account = var.billing_account_id billing_account = var.billing_account_id
prefix = var.prefix prefix = var.prefix

View File

@@ -20,7 +20,7 @@
module "project-tf" { module "project-tf" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.2.0" version = "4.0.0"
parent = var.root_node parent = var.root_node
billing_account = var.billing_account_id billing_account = var.billing_account_id
prefix = var.prefix prefix = var.prefix
@@ -102,7 +102,7 @@ module "folders-top-level" {
module "project-audit" { module "project-audit" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.2.0" version = "4.0.0"
parent = var.root_node parent = var.root_node
billing_account = var.billing_account_id billing_account = var.billing_account_id
prefix = var.prefix prefix = var.prefix
@@ -146,7 +146,7 @@ module "log-sink-audit" {
module "project-shared-resources" { module "project-shared-resources" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.2.0" version = "4.0.0"
parent = var.root_node parent = var.root_node
billing_account = var.billing_account_id billing_account = var.billing_account_id
prefix = var.prefix prefix = var.prefix

View File

@@ -20,7 +20,7 @@
module "project-svpc-host" { module "project-svpc-host" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.3.0" version = "4.0.0"
parent = var.root_node parent = var.root_node
prefix = var.prefix prefix = var.prefix
name = "vpc-host" name = "vpc-host"
@@ -33,7 +33,7 @@ module "project-svpc-host" {
module "project-service-gce" { module "project-service-gce" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.3.0" version = "4.0.0"
parent = var.root_node parent = var.root_node
prefix = var.prefix prefix = var.prefix
name = "gce" name = "gce"
@@ -47,7 +47,7 @@ module "project-service-gce" {
module "project-service-gke" { module "project-service-gke" {
source = "terraform-google-modules/project-factory/google//modules/fabric-project" source = "terraform-google-modules/project-factory/google//modules/fabric-project"
version = "3.3.0" version = "4.0.0"
parent = var.root_node parent = var.root_node
prefix = var.prefix prefix = var.prefix
name = "gke" name = "gke"

View File

@@ -30,6 +30,6 @@ def plan():
tf = tftest.TerraformTest(tfdir, _BASEDIR, tf = tftest.TerraformTest(tfdir, _BASEDIR,
os.environ.get('TERRAFORM', 'terraform')) os.environ.get('TERRAFORM', 'terraform'))
tf.setup(extra_files=['tests/{}/terraform.tfvars'.format(tfdir)]) tf.setup(extra_files=['tests/{}/terraform.tfvars'.format(tfdir)])
return tf.plan_out(parsed=True) return tf.plan(output=True)
return run_plan return run_plan

View File

@@ -21,8 +21,7 @@ import pytest
def test_shared_folder(plan): def test_shared_folder(plan):
"Shared folder resource attributes must match variables." "Shared folder resource attributes must match variables."
root_node = plan.variables['root_node'] root_node = plan.variables['root_node']
resource = plan.modules['module.shared-folder'].get( resource = plan.modules['module.shared-folder'].resources['google_folder.folders[0]']
'module.shared-folder.google_folder.folders[0]')
assert resource['values']['parent'] == root_node assert resource['values']['parent'] == root_node
assert resource['values']['display_name'] == 'shared' assert resource['values']['display_name'] == 'shared'

View File

@@ -31,15 +31,16 @@ def test_project_resource(plan, project_modules):
prefix = plan.variables['prefix'] prefix = plan.variables['prefix']
billing_account = plan.variables['billing_account_id'] billing_account = plan.variables['billing_account_id']
project_names = ['%s-%s' % (prefix, name) for name in names] project_names = ['%s-%s' % (prefix, name) for name in names]
for name, mod in project_modules.items(): for mod in project_modules.values():
resource = mod['%s.google_project.project' % name] resource = mod.resources['google_project.project']
assert resource['values']['billing_account'] == billing_account assert resource['values']['billing_account'] == billing_account
assert resource['values']['name'] in project_names assert resource['values']['name'] in project_names
def test_project_services(plan, project_modules): def test_project_services(plan, project_modules):
"Project service resource must enable APIs specified in the variable." "Project service resource must enable APIs specified in the variable."
services = plan.variables['project_services'] num_services = len(plan.variables['project_services'])
for name, mod in project_modules.items(): for mod in project_modules.values():
resource = mod['%s.google_project_services.services[0]' % name] project_services = [r for r in mod.child_modules['module.project_services'].resources if r.startswith(
assert resource['values']['services'] == services 'google_project_service.project_services')]
assert len(project_services) == num_services

View File

@@ -27,9 +27,8 @@ def test_accounts(plan, mod):
"One service account per environment should be created." "One service account per environment should be created."
environments = plan.variables['environments'] environments = plan.variables['environments']
prefix = plan.variables['prefix'] prefix = plan.variables['prefix']
resources = [v for k, v in mod.items() if '.google_service_account.' in k] resources = [
v for k, v in mod.resources.items() if 'google_service_account.' in k]
assert len(resources) == len(environments) assert len(resources) == len(environments)
assert sorted([res['values']['account_id'] for res in resources]) == sorted([ assert sorted([res['values']['account_id'] for res in resources]) == sorted([
'%s-%s' % (prefix, env) for env in environments]) '%s-%s' % (prefix, env) for env in environments])

View File

@@ -30,14 +30,15 @@ def test_project_resource(plan, project_modules):
root_node = plan.variables['root_node'].split('/')[1] root_node = plan.variables['root_node'].split('/')[1]
billing_account = plan.variables['billing_account_id'] billing_account = plan.variables['billing_account_id']
for name, mod in project_modules.items(): for name, mod in project_modules.items():
resource = mod['%s.google_project.project' % name] resource = mod.resources['google_project.project']
assert resource['values']['folder_id'] == root_node assert resource['values']['folder_id'] == root_node
assert resource['values']['billing_account'] == billing_account assert resource['values']['billing_account'] == billing_account
def test_project_services(plan, project_modules): def test_project_services(plan, project_modules):
"Project service resource must enable APIs specified in the variable." "Project service resource must enable APIs specified in the variable."
services = plan.variables['project_services'] num_services = len(plan.variables['project_services'])
for name, mod in project_modules.items(): for mod in project_modules.values():
resource = mod['%s.google_project_services.services[0]' % name] project_services = [r for r in mod.child_modules['module.project_services'].resources if r.startswith(
assert resource['values']['services'] == services 'google_project_service.project_services')]
assert len(project_services) == num_services

View File

@@ -27,7 +27,8 @@ def test_accounts(plan, mod):
"One service account per environment should be created." "One service account per environment should be created."
environments = plan.variables['environments'] environments = plan.variables['environments']
prefix = plan.variables['prefix'] prefix = plan.variables['prefix']
resources = [v for k, v in mod.items() if '.google_service_account.' in k] resources = [
v for k, v in mod.resources.items() if 'google_service_account.' in k]
assert len(resources) == len(environments) assert len(resources) == len(environments)
assert sorted([res['values']['account_id'] for res in resources]) == sorted([ assert sorted([res['values']['account_id'] for res in resources]) == sorted([
'%s-%s' % (prefix, env) for env in environments]) '%s-%s' % (prefix, env) for env in environments])

View File

@@ -26,14 +26,14 @@ def mod(plan):
def test_host_vpc(plan): def test_host_vpc(plan):
"Test that the vpc project is set as shared vpc host." "Test that the vpc project is set as shared vpc host."
mod = plan.modules['module.net-vpc-host'] mod = plan.modules['module.net-vpc-host']
resources = [v['values'] for v in mod.values() if v['type'] == resources = [v['values'] for v in mod.resources.values() if v['type'] ==
'google_compute_shared_vpc_host_project'] 'google_compute_shared_vpc_host_project']
assert resources[0]['project'] == plan.outputs['host_project_id'] assert resources[0]['project'] == plan.outputs['host_project_id']
def test_service_projects(plan, mod): def test_service_projects(plan, mod):
"Test that service projects are registered with the shared vpc." "Test that service projects are registered with the shared vpc."
resources = [v['values'] for v in mod.values() if v['type'] == resources = [v['values'] for v in mod.resources.values() if v['type'] ==
'google_compute_shared_vpc_service_project'] 'google_compute_shared_vpc_service_project']
assert len(resources) == 2 assert len(resources) == 2
assert set([r['host_project'] for r in resources]) == set( assert set([r['host_project'] for r in resources]) == set(
@@ -44,7 +44,7 @@ def test_service_projects(plan, mod):
def test_subnet_users(plan, mod): def test_subnet_users(plan, mod):
"Test that the network user role is assigned on subnets." "Test that the network user role is assigned on subnets."
resources = [v['values'] for v in mod.values() if v['type'] == resources = [v['values'] for v in mod.resources.values() if v['type'] ==
'google_compute_subnetwork_iam_binding'] 'google_compute_subnetwork_iam_binding']
assert len(resources) == 2 assert len(resources) == 2
assert set([r['project'] for r in resources]) == set( assert set([r['project'] for r in resources]) == set(
@@ -54,7 +54,7 @@ def test_subnet_users(plan, mod):
def test_service_agent(plan, mod): def test_service_agent(plan, mod):
"Test that the service agent role is assigned for gke only." "Test that the service agent role is assigned for gke only."
resources = [v['values'] for v in mod.values() if v['type'] == resources = [v['values'] for v in mod.resources.values() if v['type'] ==
'google_project_iam_binding'] 'google_project_iam_binding']
assert resources[0] == { assert resources[0] == {
'project': plan.outputs['host_project_id'], 'project': plan.outputs['host_project_id'],

View File

@@ -1,3 +1,3 @@
pytest>=4.3.1 pytest>=4.3.1
pytest-tldr>=0.2.1 pytest-tldr>=0.2.1
tftest>=0.6.4 tftest>=1.0.0