2022-10-09 06:41:56 -07:00
# Google Simple NVA Module
2022-09-30 09:43:24 -07:00
This module allows for the creation of a NVA (Network Virtual Appliance) to be used for experiments and as a stub for future appliances deployment.
This NVA can be used to interconnect up to 8 VPCs.
## Examples
### Simple example
```hcl
# Interfaces configuration
locals {
network_interfaces = [
{
addresses = null
name = "dev"
nat = false
network = "dev_vpc_self_link"
routes = ["10.128.0.0/9"]
subnetwork = "dev_vpc_nva_subnet_self_link"
},
{
addresses = null
name = "prod"
nat = false
network = "prod_vpc_self_link"
routes = ["10.0.0.0/9"]
subnetwork = "prod_vpc_nva_subnet_self_link"
}
}
# NVA config
module "nva-cloud-config" {
source = "../../../cloud-foundation-fabric/modules/cloud-config-container/simple-nva"
enable_health_checks = true
network_interfaces = local.network_interfaces
2022-10-25 09:09:31 -07:00
files = {
"/var/lib/cloud/scripts/per-boot/firewall-rules.sh" = {
content = file("./your_path/to/firewall-rules.sh")
owner = "root"
permissions = 0700
}
}
2022-09-30 09:43:24 -07:00
}
# COS VM
module "nva" {
source = "../../modules/compute-vm"
project_id = "myproject"
instance_type = "e2-standard-2"
name = "nva"
can_ip_forward = true
zone = "europe-west8-a"
tags = ["nva"]
network_interfaces = local.network_interfaces
boot_disk = {
image = "projects/cos-cloud/global/images/family/cos-stable"
size = 10
type = "pd-balanced"
}
metadata = {
user-data = module.nva-cloud-config.cloud_config
}
}
```
<!-- BEGIN TFDOC -->
## Variables
| name | description | type | required | default |
|---|---|:---:|:---:|:---:|
2022-10-25 09:09:31 -07:00
| [network_interfaces ](variables.tf#L39 ) | Network interfaces configuration. | < code title = "list(object({ routes = optional(list(string)) }))" > list( object({…})) </ code > | ✓ | |
2022-09-30 09:43:24 -07:00
| [cloud_config ](variables.tf#L17 ) | Cloud config template path. If null default will be used. | < code > string</ code > | | < code > null</ code > |
2022-10-25 09:09:31 -07:00
| [enable_health_checks ](variables.tf#L33 ) | Configures routing to enable responses to health check probes. | < code > bool</ code > | | < code > false</ code > |
| [files ](variables.tf#L23 ) | Map of extra files to create on the instance, path as key. Owner and permissions will use defaults if null. | < code title = "map(object({ content = string owner = string permissions = string }))" > map( object({…})) </ code > | | < code > {} </ code > |
2022-09-30 09:43:24 -07:00
| [test_instance ](variables-instance.tf#L17 ) | Test/development instance attributes, leave null to skip creation. | < code title = "object({ project_id = string zone = string name = string type = string network = string subnetwork = string })" > object({…}) </ code > | | < code > null</ code > |
| [test_instance_defaults ](variables-instance.tf#L30 ) | Test/development instance defaults used for optional configuration. If image is null, COS stable will be used. | < code title = "object({ disks = map(object({ read_only = bool size = number })) image = string metadata = map(string) nat = bool service_account_roles = list(string) tags = list(string) })" > object({…}) </ code > | | < code title = "{ disks = {} image = null metadata = {} nat = false service_account_roles = [ "roles/logging.logWriter", "roles/monitoring.metricWriter" ] tags = ["ssh"] }" > {…} </ code > |
## Outputs
| name | description | sensitive |
|---|---|:---:|
| [cloud_config ](outputs.tf#L17 ) | Rendered cloud-config file to be passed as user-data instance metadata. | |
| [test_instance ](outputs-instance.tf#L17 ) | Optional test instance name and address. | |
<!-- END TFDOC -->