cloud-foundation-fabric/modules/net-address
Ludovico Magnocavallo 6941313c7d
Factories refactor (#1843)
* factories refactor doc

* Adds file schema and filesystem organization

* Update 20231106-factories.md

* move factories out of blueprints and create new factories  README

* align factory in billing-account module

* align factory in dataplex-datascan module

* align factory in billing-account module

* align factory in net-firewall-policy module

* align factory in dns-response-policy module

* align factory in net-vpc-firewall module

* align factory in net-vpc module

* align factory variable names in FAST

* remove decentralized firewall blueprint

* bump terraform version

* bump module versions

* update top-level READMEs

* move project factory to modules

* fix variable names and tests

* tfdoc

* remove changelog link

* add project factory to top-level README

* fix cludrun eventarc diff

* fix README

* fix cludrun eventarc diff

---------

Co-authored-by: Simone Ruffilli <sruffilli@google.com>
2024-02-26 10:16:52 +00:00
..
README.md Use less conflicting IP 2024-02-13 07:40:31 +01:00
main.tf Add support for subnetwork for external addresses 2024-01-06 14:02:52 +01:00
outputs.tf Added IPSEC_INTERCONNECT addresses to net-address module 2023-08-02 12:12:14 +02:00
variables.tf Add support for subnetwork for external addresses 2024-01-06 14:02:52 +01:00
versions.tf Factories refactor (#1843) 2024-02-26 10:16:52 +00:00

README.md

Net Address Reservation Module

This module allows reserving Compute Engine external, global, and internal addresses.

Examples

External and global addresses

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

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.

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

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

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

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

Variables

name description type required default
project_id Project where the addresses will be created. string
external_addresses Map of external addresses, keyed by name. map(object({…})) {}
global_addresses List of global addresses to create. map(object({…})) {}
internal_addresses Map of internal addresses to create, keyed by name. map(object({…})) {}
ipsec_interconnect_addresses Map of internal addresses used for HPA VPN over Cloud Interconnect. map(object({…})) {}
psa_addresses Map of internal addresses used for Private Service Access. map(object({…})) {}
psc_addresses Map of internal addresses used for Private Service Connect. map(object({…})) {}

Outputs

name description sensitive
external_addresses Allocated external addresses.
global_addresses Allocated global external addresses.
internal_addresses Allocated internal addresses.
ipsec_interconnect_addresses Allocated internal addresses for HA VPN over Cloud Interconnect.
psa_addresses Allocated internal addresses for PSA endpoints.
psc_addresses Allocated internal addresses for PSC endpoints.

Fixtures