Skip to content

Commit 79ebe4f

Browse files
Add Managed OpenTelemetry config to google_container_cluster.
1 parent 2a53702 commit 79ebe4f

File tree

4 files changed

+148
-0
lines changed

4 files changed

+148
-0
lines changed

mmv1/third_party/terraform/services/container/resource_container_cluster.go.tmpl

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,6 +1957,26 @@ func ResourceContainerCluster() *schema.Resource {
19571957
},
19581958
},
19591959

1960+
{{- if ne $.TargetVersionName "ga" }}
1961+
"managed_opentelemetry_config": {
1962+
Type: schema.TypeList,
1963+
Optional: true,
1964+
Computed: true,
1965+
MaxItems: 1,
1966+
Description: "The configuration for the Managed OpenTelemetry pipeline inside the cluster.",
1967+
Elem: &schema.Resource{
1968+
Schema: map[string]*schema.Schema{
1969+
"scope": {
1970+
Type: schema.TypeString,
1971+
Optional: true,
1972+
Description: "The scope of the Managed OpenTelemetry pipeline. Available options include OPENTELEMETRY_SCOPE_UNSPECIFIED, NONE, and COLLECTION_AND_INSTRUMENTATION_COMPONENTS.",
1973+
ValidateFunc: validation.StringInSlice([]string{"OPENTELEMETRY_SCOPE_UNSPECIFIED", "NONE", "COLLECTION_AND_INSTRUMENTATION_COMPONENTS"}, false),
1974+
},
1975+
},
1976+
},
1977+
},
1978+
{{- end }}
1979+
19601980
// Defaults to "VPC_NATIVE" during create only
19611981
"networking_mode": {
19621982
Type: schema.TypeString,
@@ -2847,6 +2867,9 @@ func resourceContainerClusterCreate(d *schema.ResourceData, meta interface{}) er
28472867
MonitoringService: d.Get("monitoring_service").(string),
28482868
NetworkPolicy: expandNetworkPolicy(d.Get("network_policy")),
28492869
AddonsConfig: expandClusterAddonsConfig(d.Get("addons_config")),
2870+
{{- if ne $.TargetVersionName "ga" }}
2871+
ManagedOpentelemetryConfig: expandManagedOpenTelemetryConfig(d.Get("managed_opentelemetry_config")),
2872+
{{- end }}
28502873
EnableKubernetesAlpha: d.Get("enable_kubernetes_alpha").(bool),
28512874
IpAllocationPolicy: ipAllocationBlock,
28522875
{{- if ne $.TargetVersionName "ga" }}
@@ -3622,6 +3645,12 @@ func resourceContainerClusterRead(d *schema.ResourceData, meta interface{}) erro
36223645
return err
36233646
}
36243647

3648+
{{ if ne $.TargetVersionName "ga" }}
3649+
if err := d.Set("managed_opentelemetry_config", flattenManagedOpenTelemetryConfig(cluster.ManagedOpentelemetryConfig)); err != nil {
3650+
return err
3651+
}
3652+
{{- end }}
3653+
36253654
if err := d.Set("node_pool_auto_config", flattenNodePoolAutoConfig(cluster.NodePoolAutoConfig)); err != nil {
36263655
return err
36273656
}
@@ -4899,6 +4928,23 @@ func resourceContainerClusterUpdate(d *schema.ResourceData, meta interface{}) er
48994928
log.Printf("[INFO] GKE cluster %s monitoring config has been updated", d.Id())
49004929
}
49014930

4931+
{{ if ne $.TargetVersionName `ga` -}}
4932+
if d.HasChange("managed_opentelemetry_config") {
4933+
req := &container.UpdateClusterRequest{
4934+
Update: &container.ClusterUpdate{
4935+
DesiredManagedOpentelemetryConfig: expandManagedOpenTelemetryConfig(d.Get("managed_opentelemetry_config")),
4936+
},
4937+
}
4938+
updateF := updateFunc(req, "updating GKE cluster managed opentelemetry config")
4939+
// Call update serially.
4940+
if err := transport_tpg.LockedCall(lockKey, updateF); err != nil {
4941+
return err
4942+
}
4943+
4944+
log.Printf("[INFO] GKE cluster %s managed opentelemetry config has been updated", d.Id())
4945+
}
4946+
{{- end }}
4947+
49024948
if d.HasChange("effective_labels") {
49034949
resourceLabels := d.Get("effective_labels").(map[string]interface{})
49044950
labelFingerprint := d.Get("label_fingerprint").(string)
@@ -6342,6 +6388,30 @@ func expandManCidrBlocks(configured interface{}) []*container.CidrBlock {
63426388
return result
63436389
}
63446390

6391+
{{- if ne $.TargetVersionName "ga" }}
6392+
func expandManagedOpenTelemetryConfig(configured interface{}) *container.ManagedOpenTelemetryConfig {
6393+
l := configured.([]interface{})
6394+
if len(l) == 0 || l[0] == nil {
6395+
return nil
6396+
}
6397+
config := l[0].(map[string]interface{})
6398+
return &container.ManagedOpenTelemetryConfig{
6399+
Scope: config["scope"].(string),
6400+
}
6401+
}
6402+
6403+
func flattenManagedOpenTelemetryConfig(c *container.ManagedOpenTelemetryConfig) []map[string]interface{} {
6404+
if c == nil {
6405+
return nil
6406+
}
6407+
return []map[string]interface{}{
6408+
{
6409+
"scope": c.Scope,
6410+
},
6411+
}
6412+
}
6413+
{{- end }}
6414+
63456415
func expandNetworkPolicy(configured interface{}) *container.NetworkPolicy {
63466416
result := &container.NetworkPolicy{}
63476417
l := configured.([]interface{})

mmv1/third_party/terraform/services/container/resource_container_cluster_meta.yaml.tmpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ fields:
209209
api_field: 'maintenancePolicy.window.recurringWindow.recurrence'
210210
- field: 'maintenance_policy.recurring_window.start_time'
211211
api_field: 'maintenancePolicy.window.recurringWindow.window.startTime'
212+
{{- if ne $.TargetVersionName "ga" }}
213+
- field: 'managed_opentelemetry_config.scope'
214+
api_field: 'managedOpentelemetryConfig.scope'
215+
{{- end }}
212216
- api_field: 'masterAuth.clientCertificate'
213217
- api_field: 'masterAuth.clientCertificateConfig.issueClientCertificate'
214218
- api_field: 'masterAuth.clientKey'

mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,6 +1463,74 @@ func TestAccContainerCluster_withTelemetryEnabled(t *testing.T) {
14631463
}
14641464
{{- end }}
14651465

1466+
{{- if ne $.TargetVersionName "ga" }}
1467+
func TestAccContainerCluster_withManagedOpenTelemetryConfig(t *testing.T) {
1468+
t.Parallel()
1469+
1470+
clusterName := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10))
1471+
networkName := acctest.BootstrapSharedTestNetwork(t, "gke-cluster")
1472+
subnetworkName := acctest.BootstrapSubnet(t, "gke-cluster", networkName)
1473+
1474+
acctest.VcrTest(t, resource.TestCase{
1475+
PreCheck: func() { acctest.AccTestPreCheck(t) },
1476+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
1477+
CheckDestroy: testAccCheckContainerClusterDestroyProducer(t),
1478+
Steps: []resource.TestStep{
1479+
{
1480+
Config: testAccContainerCluster_withManagedOpenTelemetryConfig(clusterName, networkName, subnetworkName, "COLLECTION_AND_INSTRUMENTATION_COMPONENTS"),
1481+
Check: resource.ComposeTestCheckFunc(
1482+
resource.TestCheckResourceAttr("google_container_cluster.with_managed_opentelemetry",
1483+
"managed_opentelemetry_config.0.scope", "COLLECTION_AND_INSTRUMENTATION_COMPONENTS"),
1484+
),
1485+
},
1486+
{
1487+
ResourceName: "google_container_cluster.with_managed_opentelemetry",
1488+
ImportState: true,
1489+
ImportStateVerify: true,
1490+
ImportStateVerifyIgnore: []string{"min_master_version", "deletion_protection"},
1491+
},
1492+
{
1493+
Config: testAccContainerCluster_withManagedOpenTelemetryConfig(clusterName, networkName, subnetworkName, "NONE"),
1494+
Check: resource.ComposeTestCheckFunc(
1495+
resource.TestCheckResourceAttr("google_container_cluster.with_managed_opentelemetry",
1496+
"managed_opentelemetry_config.0.scope", "NONE"),
1497+
),
1498+
},
1499+
{
1500+
ResourceName: "google_container_cluster.with_managed_opentelemetry",
1501+
ImportState: true,
1502+
ImportStateVerify: true,
1503+
ImportStateVerifyIgnore: []string{"min_master_version", "deletion_protection"},
1504+
},
1505+
},
1506+
})
1507+
}
1508+
1509+
func testAccContainerCluster_withManagedOpenTelemetryConfig(clusterName, networkName, subnetworkName, scope string) string {
1510+
return fmt.Sprintf(`
1511+
data "google_container_engine_versions" "uscentral1a" {
1512+
location = "us-central1-a"
1513+
version_prefix = "1.34."
1514+
}
1515+
1516+
resource "google_container_cluster" "with_managed_opentelemetry" {
1517+
name = "%s"
1518+
location = "us-central1-a"
1519+
initial_node_count = 1
1520+
network = "%s"
1521+
subnetwork = "%s"
1522+
min_master_version = data.google_container_engine_versions.uscentral1a.latest_master_version
1523+
1524+
managed_opentelemetry_config {
1525+
scope = "%s"
1526+
}
1527+
1528+
deletion_protection = false
1529+
}
1530+
`, clusterName, networkName, subnetworkName, scope)
1531+
}
1532+
{{- end }}
1533+
14661534
func TestAccContainerCluster_withMasterAuthorizedNetworksConfig(t *testing.T) {
14671535
t.Parallel()
14681536

mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https:/
210210
* `maintenance_policy` - (Optional) The maintenance policy to use for the cluster. Structure is
211211
[documented below](#nested_maintenance_policy).
212212

213+
* `managed_opentelemetry_config` - (Optional) Configuration for the [GKE Managed OpenTelemetry](https://docs.cloud.google.com/kubernetes-engine/docs/concepts/managed-otel-gke) feature. Structure is [documented below](#nested_managed_opentelemetry_config).
214+
213215
* `master_auth` - (Optional) The authentication information for accessing the
214216
Kubernetes master. Some values in this block are only returned by the API if
215217
your service account has permission to get credentials for your GKE cluster. If
@@ -697,6 +699,10 @@ This block also contains several computed attributes, documented below.
697699

698700
* `advanced_datapath_observability_config` - (Optional) Configuration for Advanced Datapath Monitoring. Structure is [documented below](#nested_advanced_datapath_observability_config).
699701

702+
<a name="nested_managed_opentelemetry_config"></a>The `managed_opentelemetry_config` block supports:
703+
704+
* `scope` - (Required) The scope of the Managed OpenTelemetry pipeline. Supported values include: `OPENTELEMETRY_SCOPE_UNSPECIFIED`, `NONE`, `COLLECTION_AND_INSTRUMENTATION_COMPONENTS`.
705+
700706
<a name="nested_managed_prometheus"></a>The `managed_prometheus` block supports:
701707

702708
* `enabled` - (Required) Whether or not the managed collection is enabled.

0 commit comments

Comments
 (0)