diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster.go.erb b/mmv1/third_party/terraform/services/container/resource_container_cluster.go.erb
index 0b772b714733..356a5b58ec6d 100644
--- a/mmv1/third_party/terraform/services/container/resource_container_cluster.go.erb
+++ b/mmv1/third_party/terraform/services/container/resource_container_cluster.go.erb
@@ -1197,7 +1197,7 @@ func ResourceContainerCluster() *schema.Resource {
Type: schema.TypeList,
Optional: true,
Computed: true,
- MaxItems: 2,
+ MaxItems: 1,
Description: `Configuration of Advanced Datapath Observability features.`,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
@@ -1206,12 +1206,21 @@ func ResourceContainerCluster() *schema.Resource {
Required: true,
Description: `Whether or not the advanced datapath metrics are enabled.`,
},
+ "enable_relay": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: `Whether or not Relay is enabled.`,
+ Default: false,
+ ConflictsWith: []string{"monitoring_config.0.advanced_datapath_observability_config.0.relay_mode"},
+ },
"relay_mode": {
- Type: schema.TypeString,
- Optional: true,
- Computed: true,
- Description: `Mode used to make Relay available.`,
- ValidateFunc: validation.StringInSlice([]string{"DISABLED", "INTERNAL_VPC_LB", "EXTERNAL_LB"}, false),
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Deprecated: "Deprecated in favor of enable_relay field. Remove this attribute's configuration as this field will be removed in the next major release and enable_relay will become a required field.",
+ Description: `Mode used to make Relay available.`,
+ ValidateFunc: validation.StringInSlice([]string{"DISABLED", "INTERNAL_VPC_LB", "EXTERNAL_LB"}, false),
+ ConflictsWith: []string{"monitoring_config.0.advanced_datapath_observability_config.0.enable_relay"},
},
},
},
@@ -5316,7 +5325,18 @@ func expandMonitoringConfig(configured interface{}) *container.MonitoringConfig
mc.AdvancedDatapathObservabilityConfig = &container.AdvancedDatapathObservabilityConfig{
EnableMetrics: advanced_datapath_observability_config["enable_metrics"].(bool),
- RelayMode: advanced_datapath_observability_config["relay_mode"].(string),
+ }
+
+ enable_relay := advanced_datapath_observability_config["enable_relay"].(bool)
+ relay_mode := advanced_datapath_observability_config["relay_mode"].(string)
+ if enable_relay {
+ mc.AdvancedDatapathObservabilityConfig.EnableRelay = enable_relay
+ } else if relay_mode == "INTERNAL_VPC_LB" || relay_mode == "EXTERNAL_LB" {
+ mc.AdvancedDatapathObservabilityConfig.RelayMode = relay_mode
+ } else {
+ mc.AdvancedDatapathObservabilityConfig.EnableRelay = enable_relay
+ mc.AdvancedDatapathObservabilityConfig.RelayMode = "DISABLED"
+ mc.AdvancedDatapathObservabilityConfig.ForceSendFields = []string{"EnableRelay"}
}
}
@@ -6143,10 +6163,33 @@ func flattenMonitoringConfig(c *container.MonitoringConfig) []map[string]interfa
}
func flattenAdvancedDatapathObservabilityConfig(c *container.AdvancedDatapathObservabilityConfig) []map[string]interface{} {
+ if c == nil {
+ return nil
+ }
+
+ if c.EnableRelay {
+ return []map[string]interface{}{
+ {
+ "enable_metrics": c.EnableMetrics,
+ "enable_relay": c.EnableRelay,
+ },
+ }
+ }
+
+ if c.RelayMode == "INTERNAL_VPC_LB" || c.RelayMode == "EXTERNAL_LB" {
+ return []map[string]interface{}{
+ {
+ "enable_metrics": c.EnableMetrics,
+ "relay_mode": c.RelayMode,
+ },
+ }
+ }
+
return []map[string]interface{}{
{
"enable_metrics": c.EnableMetrics,
- "relay_mode": c.RelayMode,
+ "enable_relay": false,
+ "relay_mode": "DISABLED",
},
}
}
diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster_migratev1.go.erb b/mmv1/third_party/terraform/services/container/resource_container_cluster_migratev1.go.erb
index 2bce542a3925..350451a0e97b 100644
--- a/mmv1/third_party/terraform/services/container/resource_container_cluster_migratev1.go.erb
+++ b/mmv1/third_party/terraform/services/container/resource_container_cluster_migratev1.go.erb
@@ -996,6 +996,11 @@ func resourceContainerClusterResourceV1() *schema.Resource {
Required: true,
Description: `Whether or not the advanced datapath metrics are enabled.`,
},
+ "enable_relay": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: `Whether or not Relay is enabled.`,
+ },
"relay_mode": {
Type: schema.TypeString,
Optional: true,
diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.erb b/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.erb
index f332c333bdba..c57254c7e06d 100644
--- a/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.erb
+++ b/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.erb
@@ -3125,6 +3125,24 @@ func TestAccContainerCluster_withMonitoringConfigAdvancedDatapathObservabilityCo
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"min_master_version", "deletion_protection"},
},
+ {
+ Config: testAccContainerCluster_withMonitoringConfigAdvancedDatapathObservabilityConfigEnabledOld(clusterName),
+ },
+ {
+ ResourceName: "google_container_cluster.primary",
+ ImportState: true,
+ ImportStateVerify: true,
+ ImportStateVerifyIgnore: []string{"min_master_version", "deletion_protection"},
+ },
+ {
+ Config: testAccContainerCluster_withMonitoringConfigAdvancedDatapathObservabilityConfigDisabledOld(clusterName),
+ },
+ {
+ ResourceName: "google_container_cluster.primary",
+ ImportState: true,
+ ImportStateVerify: true,
+ ImportStateVerifyIgnore: []string{"min_master_version", "deletion_protection"},
+ },
},
})
}
@@ -8849,6 +8867,56 @@ resource "google_compute_subnetwork" "container_subnetwork" {
}
}
+resource "google_container_cluster" "primary" {
+ name = "%s"
+ location = "us-central1-a"
+ initial_node_count = 1
+ datapath_provider = "ADVANCED_DATAPATH"
+
+ network = google_compute_network.container_network.name
+ subnetwork = google_compute_subnetwork.container_subnetwork.name
+ ip_allocation_policy {
+ cluster_secondary_range_name = google_compute_subnetwork.container_subnetwork.secondary_ip_range[0].range_name
+ services_secondary_range_name = google_compute_subnetwork.container_subnetwork.secondary_ip_range[1].range_name
+ }
+
+ monitoring_config {
+ enable_components = []
+ advanced_datapath_observability_config {
+ enable_metrics = true
+ enable_relay = true
+ }
+ }
+ deletion_protection = false
+}
+`, name, name)
+}
+
+func testAccContainerCluster_withMonitoringConfigAdvancedDatapathObservabilityConfigEnabledOld(name string) string {
+ return fmt.Sprintf(`
+resource "google_compute_network" "container_network" {
+ name = "%s-nw"
+ auto_create_subnetworks = false
+}
+
+resource "google_compute_subnetwork" "container_subnetwork" {
+ name = google_compute_network.container_network.name
+ network = google_compute_network.container_network.name
+ ip_cidr_range = "10.0.36.0/24"
+ region = "us-central1"
+ private_ip_google_access = true
+
+ secondary_ip_range {
+ range_name = "services-range"
+ ip_cidr_range = "192.168.1.0/24"
+ }
+
+ secondary_ip_range {
+ range_name = "pod-ranges"
+ ip_cidr_range = "192.168.64.0/22"
+ }
+}
+
resource "google_container_cluster" "primary" {
name = "%s"
location = "us-central1-a"
@@ -8899,6 +8967,56 @@ resource "google_compute_subnetwork" "container_subnetwork" {
}
}
+resource "google_container_cluster" "primary" {
+ name = "%s"
+ location = "us-central1-a"
+ initial_node_count = 1
+ datapath_provider = "ADVANCED_DATAPATH"
+
+ network = google_compute_network.container_network.name
+ subnetwork = google_compute_subnetwork.container_subnetwork.name
+ ip_allocation_policy {
+ cluster_secondary_range_name = google_compute_subnetwork.container_subnetwork.secondary_ip_range[0].range_name
+ services_secondary_range_name = google_compute_subnetwork.container_subnetwork.secondary_ip_range[1].range_name
+ }
+
+ monitoring_config {
+ enable_components = []
+ advanced_datapath_observability_config {
+ enable_metrics = false
+ enable_relay = false
+ }
+ }
+ deletion_protection = false
+}
+`, name, name)
+}
+
+func testAccContainerCluster_withMonitoringConfigAdvancedDatapathObservabilityConfigDisabledOld(name string) string {
+ return fmt.Sprintf(`
+resource "google_compute_network" "container_network" {
+ name = "%s-nw"
+ auto_create_subnetworks = false
+}
+
+resource "google_compute_subnetwork" "container_subnetwork" {
+ name = google_compute_network.container_network.name
+ network = google_compute_network.container_network.name
+ ip_cidr_range = "10.0.36.0/24"
+ region = "us-central1"
+ private_ip_google_access = true
+
+ secondary_ip_range {
+ range_name = "services-range"
+ ip_cidr_range = "192.168.1.0/24"
+ }
+
+ secondary_ip_range {
+ range_name = "pod-ranges"
+ ip_cidr_range = "192.168.64.0/22"
+ }
+}
+
resource "google_container_cluster" "primary" {
name = "%s"
location = "us-central1-a"
diff --git a/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown b/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown
index 7107d81fc7ed..d35c3df76919 100644
--- a/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown
+++ b/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown
@@ -618,6 +618,7 @@ This block also contains several computed attributes, documented below.
The `advanced_datapath_observability_config` block supports:
* `enable_metrics` - (Required) Whether or not to enable advanced datapath metrics.
+* `enable_relay` - (Optional) Whether or not Relay is enabled.
* `relay_mode` - (Optional) Mode used to make Relay available.
The `maintenance_policy` block supports: