198 lines
8.7 KiB
Markdown
198 lines
8.7 KiB
Markdown
# Net Address Reservation Module
|
|
|
|
This module allows reserving Compute Engine external, global, and internal addresses. The module also supports managing VPC network attachments from service projects.
|
|
|
|
<!-- BEGIN TOC -->
|
|
- [Examples](#examples)
|
|
- [External and global addresses](#external-and-global-addresses)
|
|
- [Internal addresses](#internal-addresses)
|
|
- [IPv6 addresses](#ipv6-addresses)
|
|
- [PSA addresses](#psa-addresses)
|
|
- [PSC addresses](#psc-addresses)
|
|
- [IPSec Interconnect addresses](#ipsec-interconnect-addresses)
|
|
- [PSC Network Attachments](#psc-network-attachments)
|
|
- [Variables](#variables)
|
|
- [Outputs](#outputs)
|
|
- [Fixtures](#fixtures)
|
|
<!-- END TOC -->
|
|
|
|
## Examples
|
|
|
|
### External and global addresses
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
external_addresses = {
|
|
one = { region = "europe-west1" }
|
|
two = {
|
|
region = "europe-west2"
|
|
tier = "STANDARD"
|
|
}
|
|
}
|
|
global_addresses = {
|
|
app-1 = {}
|
|
app-2 = {}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=4 inventory=external.yaml e2e
|
|
```
|
|
|
|
### Internal addresses
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
internal_addresses = {
|
|
ilb-1 = {
|
|
purpose = "SHARED_LOADBALANCER_VIP"
|
|
region = var.region
|
|
subnetwork = var.subnet.self_link
|
|
}
|
|
ilb-2 = {
|
|
address = "10.0.16.102"
|
|
region = var.region
|
|
subnetwork = var.subnet.self_link
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=2 inventory=internal.yaml e2e
|
|
```
|
|
|
|
### IPv6 addresses
|
|
|
|
You can reserve both external and internal IPv6 addresses.
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
external_addresses = {
|
|
nlb = {
|
|
region = var.region
|
|
subnetwork = module.vpc.subnets["${var.region}/ipv6-external"].self_link
|
|
ipv6 = {
|
|
endpoint_type = "NETLB"
|
|
}
|
|
}
|
|
}
|
|
internal_addresses = {
|
|
vm = {
|
|
ipv6 = {}
|
|
region = var.region
|
|
subnetwork = module.vpc.subnets["${var.region}/ipv6-internal"].self_link
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=2 resources=7 fixtures=fixtures/net-vpc-ipv6.tf inventory=ipv6.yaml e2e
|
|
```
|
|
|
|
### PSA addresses
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
psa_addresses = {
|
|
cloudsql-mysql = {
|
|
address = "10.10.10.0"
|
|
network = var.vpc.self_link
|
|
prefix_length = 24
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=1 inventory=psa.yaml e2e
|
|
```
|
|
|
|
### PSC addresses
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
psc_addresses = {
|
|
one = {
|
|
address = "10.0.0.32"
|
|
network = var.vpc.self_link
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=1 inventory=psc.yaml e2e
|
|
```
|
|
|
|
### IPSec Interconnect addresses
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
ipsec_interconnect_addresses = {
|
|
vpn-gw-range-1 = {
|
|
address = "10.255.255.0"
|
|
region = var.region
|
|
network = var.vpc.self_link
|
|
prefix_length = 29
|
|
}
|
|
vpn-gw-range-2 = {
|
|
address = "10.255.255.8"
|
|
region = var.region
|
|
network = var.vpc.self_link
|
|
prefix_length = 29
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=2 inventory=ipsec-interconnect.yaml e2e
|
|
```
|
|
|
|
### PSC Network Attachments
|
|
|
|
The project where the network attachment is created must be either the VPC project, or a Shared VPC service project of the host owning the VPC.
|
|
|
|
```hcl
|
|
module "addresses" {
|
|
source = "./fabric/modules/net-address"
|
|
project_id = var.project_id
|
|
network_attachments = {
|
|
gce-0 = {
|
|
subnet_self_link = (
|
|
"projects/net-host/regions/europe-west8/subnetworks/gce"
|
|
)
|
|
producer_accept_lists = [var.project_id]
|
|
}
|
|
}
|
|
}
|
|
# tftest modules=1 resources=1 inventory=network-attachments.yaml
|
|
```
|
|
<!-- BEGIN TFDOC -->
|
|
## Variables
|
|
|
|
| name | description | type | required | default |
|
|
|---|---|:---:|:---:|:---:|
|
|
| [project_id](variables.tf#L97) | Project where the addresses will be created. | <code>string</code> | ✓ | |
|
|
| [external_addresses](variables.tf#L17) | Map of external addresses, keyed by name. | <code title="map(object({ region = string description = optional(string, "Terraform managed.") ipv6 = optional(object({ endpoint_type = string })) labels = optional(map(string), {}) name = optional(string) subnetwork = optional(string) # for IPv6 tier = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [global_addresses](variables.tf#L40) | List of global addresses to create. | <code title="map(object({ description = optional(string, "Terraform managed.") ipv6 = optional(map(string)) # To be left empty for ipv6 name = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [internal_addresses](variables.tf#L50) | Map of internal addresses to create, keyed by name. | <code title="map(object({ region = string subnetwork = string address = optional(string) description = optional(string, "Terraform managed.") ipv6 = optional(map(string)) # To be left empty for ipv6 labels = optional(map(string)) name = optional(string) purpose = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [ipsec_interconnect_addresses](variables.tf#L65) | Map of internal addresses used for HPA VPN over Cloud Interconnect. | <code title="map(object({ region = string address = string network = string description = optional(string, "Terraform managed.") name = optional(string) prefix_length = number }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [network_attachments](variables.tf#L84) | PSC network attachments, names as keys. | <code title="map(object({ subnet_self_link = string automatic_connection = optional(bool, false) description = optional(string, "Terraform-managed.") producer_accept_lists = optional(list(string)) producer_reject_lists = optional(list(string)) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [psa_addresses](variables.tf#L102) | Map of internal addresses used for Private Service Access. | <code title="map(object({ address = string network = string prefix_length = number description = optional(string, "Terraform managed.") name = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
| [psc_addresses](variables.tf#L115) | Map of internal addresses used for Private Service Connect. | <code title="map(object({ address = string network = string description = optional(string, "Terraform managed.") name = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
|
|
|
## Outputs
|
|
|
|
| name | description | sensitive |
|
|
|---|---|:---:|
|
|
| [external_addresses](outputs.tf#L17) | Allocated external addresses. | |
|
|
| [global_addresses](outputs.tf#L25) | Allocated global external addresses. | |
|
|
| [internal_addresses](outputs.tf#L33) | Allocated internal addresses. | |
|
|
| [ipsec_interconnect_addresses](outputs.tf#L41) | Allocated internal addresses for HA VPN over Cloud Interconnect. | |
|
|
| [network_attachment_ids](outputs.tf#L49) | IDs of network attachments. | |
|
|
| [psa_addresses](outputs.tf#L57) | Allocated internal addresses for PSA endpoints. | |
|
|
| [psc_addresses](outputs.tf#L65) | Allocated internal addresses for PSC endpoints. | |
|
|
|
|
## Fixtures
|
|
|
|
- [net-vpc-ipv6.tf](../../tests/fixtures/net-vpc-ipv6.tf)
|
|
<!-- END TFDOC -->
|