diff --git a/modules/gcve-private-cloud/README.md b/modules/gcve-private-cloud/README.md
index 93e9271e..a0feefdd 100644
--- a/modules/gcve-private-cloud/README.md
+++ b/modules/gcve-private-cloud/README.md
@@ -23,19 +23,19 @@ At the moment this module doesn't support the following use cases:
```hcl
module "gcve-pc" {
- source = "./fabric/modules/gcve-private-cloud"
- name = "gcve-pc"
- project_id = "gcve-test-project"
- zone = "europe-west8-a"
- cidr = "192.168.0.0/24"
+ source = "./fabric/modules/gcve-private-cloud"
+ name = "gcve-pc"
+ project_id = "gcve-test-project"
+ zone = "europe-west8-a"
+ cidr = "192.168.0.0/24"
private_connections = {
transit-conn1 = {
- name = "transit-conn1",
- network_self_link = "projects/test-prj-gcve-01/global/networks/default",
- peering_name = "servicenetworking-googleapis-com"
- type = "PRIVATE_SERVICE_ACCESS",
- routing_mode = "REGIONAL"
+ name = "transit-conn1"
+ network_self_link = "projects/test-prj-gcve-01/global/networks/default"
+ tenant_host_project = "g39a814990532d10ap-tp"
+ type = "PRIVATE_SERVICE_ACCESS"
+ routing_mode = "REGIONAL"
}
}
}
@@ -45,11 +45,11 @@ module "gcve-pc" {
```hcl
module "gcve-pc" {
- source = "./fabric/modules/gcve-private-cloud"
- name = "gcve-pc"
- project_id = "gcve-test-project"
- zone = "europe-west8-a"
- cidr = "192.168.0.0/24"
+ source = "./fabric/modules/gcve-private-cloud"
+ name = "gcve-pc"
+ project_id = "gcve-test-project"
+ zone = "europe-west8-a"
+ cidr = "192.168.0.0/24"
management_cluster_config = {
node_type_id = "standard-72"
@@ -59,11 +59,11 @@ module "gcve-pc" {
private_connections = {
transit-conn1 = {
- name = "transit-conn1",
- network_self_link = "projects/test-prj-gcve-01/global/networks/default",
- peering_name = "servicenetworking-googleapis-com"
- type = "PRIVATE_SERVICE_ACCESS",
- routing_mode = "REGIONAL"
+ name = "transit-conn1"
+ network_self_link = "projects/test-prj-gcve-01/global/networks/default"
+ tenant_host_project = "g39a814990532d10ap-tp"
+ type = "PRIVATE_SERVICE_ACCESS"
+ routing_mode = "REGIONAL"
}
}
}
@@ -76,13 +76,13 @@ module "gcve-pc" {
|---|---|:---:|:---:|:---:|
| [cidr](variables.tf#L23) | vSphere/vSAN subnets CIDR range. To undersatnd the limits, please refer to [GCVE network requirements](https://cloud.google.com/vmware-engine/docs/quickstart-networking-requirements). | string
| ✓ | |
| [name](variables.tf#L43) | Private cloud name. | string
| ✓ | |
-| [project_id](variables.tf#L76) | Project id. | string
| ✓ | |
-| [zone](variables.tf#L93) | Private cloud zone. | string
| ✓ | |
+| [project_id](variables.tf#L85) | Project id. | string
| ✓ | |
+| [zone](variables.tf#L102) | Private cloud zone. | string
| ✓ | |
| [description](variables.tf#L17) | Private cloud description. | string
| | "Terraform-managed."
|
| [management_cluster_config](variables.tf#L28) | Management cluster configuration. | object({…})
| | {…}
|
-| [private_connections](variables.tf#L48) | VMWare private connections configuration. It is used to create the gcloud command printed as output. | map(object({…}))
| | {}
|
-| [vmw_network_create](variables.tf#L81) | Create the VMware Engine network. When set to false, it uses a data source to reference an existing VMware Engine network. | bool
| | true
|
-| [vmw_network_description](variables.tf#L87) | VMware Engine network description. | string
| | "Terraform-managed."
|
+| [private_connections](variables.tf#L48) | VMWare private connections configuration. It is used to create the gcloud command printed as output. | map(object({…}))
| | {}
|
+| [vmw_network_create](variables.tf#L90) | Create the VMware Engine network. When set to false, it uses a data source to reference an existing VMware Engine network. | bool
| | true
|
+| [vmw_network_description](variables.tf#L96) | VMware Engine network description. | string
| | "Terraform-managed."
|
## Outputs
@@ -96,5 +96,6 @@ module "gcve-pc" {
| [private-cloud](outputs.tf#L42) | The private cloud resource | |
| [private_connections_setup](outputs.tf#L47) | Cloud SDK commands for the private connections manual setup. | |
| [state](outputs.tf#L63) | Details about the state of the private cloud | |
+| [test](outputs.tf#L73) | | |
| [vcenter](outputs.tf#L68) | Details about a vCenter Server management appliance. | |
diff --git a/modules/gcve-private-cloud/main.tf b/modules/gcve-private-cloud/main.tf
index 875798d2..3235fb29 100644
--- a/modules/gcve-private-cloud/main.tf
+++ b/modules/gcve-private-cloud/main.tf
@@ -21,9 +21,10 @@ locals {
? try(google_vmwareengine_network.private-cloud-network.0, null)
: try(data.google_vmwareengine_network.private-cloud-network.0, null)
)
- psa_peering = {
- for k, v in data.google_compute_network_peering.psa_peering :
- k => regex("(.*)/projects/([a-z0-9-]*)/(.*)", "${v.peer_network}")[1]
+ tenant_host_project = {
+ for k, v in var.private_connections : k => v.tenant_host_project == null
+ ? regex("(.*)/projects/([a-z0-9-]*)/(.*)", "${data.google_compute_network_peering.psa_peering[k].peer_network}")[1]
+ : v.tenant_host_project
}
}
@@ -35,10 +36,8 @@ data "google_vmwareengine_network" "private-cloud-network" {
location = local.region
}
-#TO REMOVE?
-
data "google_compute_network_peering" "psa_peering" {
- for_each = var.private_connections
+ for_each = { for k, v in var.private_connections : k => v if v.tenant_host_project == null }
name = each.value.peering_name
network = each.value.network_self_link
}
diff --git a/modules/gcve-private-cloud/outputs.tf b/modules/gcve-private-cloud/outputs.tf
index ff60b349..76267f21 100644
--- a/modules/gcve-private-cloud/outputs.tf
+++ b/modules/gcve-private-cloud/outputs.tf
@@ -54,7 +54,7 @@ output "private_connections_setup" {
--vmware-engine-network=${local.region}-default \
--description="${v.description}" \
--routing-mode=${v.routing_mode} \
- --service-project=${local.psa_peering[k]} \
+ --service-project=${local.tenant_host_project[k]} \
--type=${v.type}
EOT
}
diff --git a/modules/gcve-private-cloud/variables.tf b/modules/gcve-private-cloud/variables.tf
index 1449476b..d81eb0b4 100644
--- a/modules/gcve-private-cloud/variables.tf
+++ b/modules/gcve-private-cloud/variables.tf
@@ -48,15 +48,24 @@ variable "name" {
variable "private_connections" {
description = "VMWare private connections configuration. It is used to create the gcloud command printed as output."
type = map(object({
- name = string
- network_self_link = string
- peering_name = string
- description = optional(string, "Terraform-managed.")
- type = optional(string, "PRIVATE_SERVICE_ACCESS")
- routing_mode = optional(string, "REGIONAL")
+ name = string
+ network_self_link = string
+ peering_name = optional(string)
+ tenant_host_project = optional(string)
+ description = optional(string, "Terraform-managed.")
+ type = optional(string, "PRIVATE_SERVICE_ACCESS")
+ routing_mode = optional(string, "REGIONAL")
}))
default = {}
nullable = false
+ validation {
+ condition = alltrue([
+ for k, v in var.private_connections :
+ (v.peering_name != null) != (v.tenant_host_project != null)
+ ]
+ )
+ error_message = "Both peering_name and tenant_host_project variables have been set. Only one variable is allowed."
+ }
validation {
condition = alltrue([
for r in var.private_connections :