Skip to content

Commit dc1de85

Browse files
bharathkkbapeabody
andauthored
fix: support explicit k8s version with unspecified release channel (#1335)
* fix: support explicit k8s version with unspecified release channel * update example, add test * Update versions.tf Co-authored-by: Andrew Peabody <[email protected]>
1 parent f8a5cca commit dc1de85

File tree

16 files changed

+42
-11
lines changed

16 files changed

+42
-11
lines changed

autogen/main/cluster.tf.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ resource "google_container_cluster" "primary" {
6969
disabled = var.disable_default_snat
7070
}
7171
{% endif %}
72-
min_master_version = var.release_channel != null ? null : local.master_version
72+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
7373

7474
{% if beta_cluster and autopilot_cluster != true %}
7575
dynamic "cluster_telemetry" {

cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ resource "google_container_cluster" "primary" {
5050

5151
subnetwork = "projects/${local.network_project_id}/regions/${local.region}/subnetworks/${var.subnetwork}"
5252

53-
min_master_version = var.release_channel != null ? null : local.master_version
53+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
5454

5555
logging_service = var.logging_service
5656
monitoring_service = var.monitoring_service

examples/safer_cluster/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ This example illustrates how to instantiate the opinionated Safer Cluster module
1717
| ca\_certificate | The cluster ca certificate (base64 encoded) |
1818
| client\_token | The bearer token for auth |
1919
| cluster\_name | Cluster name |
20+
| explicit\_k8s\_version | Explicit version used for cluster creation |
2021
| kubernetes\_endpoint | The cluster endpoint |
2122
| location | n/a |
2223
| master\_kubernetes\_version | Kubernetes version of the master |

examples/safer_cluster/main.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ provider "kubernetes" {
3838
cluster_ca_certificate = base64decode(module.gke.ca_certificate)
3939
}
4040

41+
// A random valid k8s version is retrived
42+
// to specify as an explicit version.
43+
data "google_container_engine_versions" "current" {
44+
project = var.project_id
45+
location = var.region
46+
}
47+
48+
resource "random_shuffle" "version" {
49+
input = data.google_container_engine_versions.current.valid_master_versions
50+
result_count = 1
51+
}
52+
4153
module "gke" {
4254
source = "../../modules/safer-cluster/"
4355
project_id = var.project_id
@@ -51,6 +63,8 @@ module "gke" {
5163
master_ipv4_cidr_block = "172.16.0.0/28"
5264
add_cluster_firewall_rules = true
5365
firewall_inbound_ports = ["9443", "15017"]
66+
kubernetes_version = random_shuffle.version.result[0]
67+
release_channel = "UNSPECIFIED"
5468

5569
master_authorized_networks = [
5670
{

examples/safer_cluster/outputs.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,8 @@ output "project_id" {
7474
description = "The project ID the cluster is in"
7575
value = var.project_id
7676
}
77+
78+
output "explicit_k8s_version" {
79+
description = "Explicit version used for cluster creation"
80+
value = random_shuffle.version.result[0]
81+
}

examples/safer_cluster/versions.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ terraform {
2929
source = "hashicorp/kubernetes"
3030
}
3131
random = {
32-
source = "hashicorp/random"
32+
source = "hashicorp/random"
33+
version = "~> 3.0"
3334
}
3435
}
3536
}

modules/beta-autopilot-private-cluster/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ resource "google_container_cluster" "primary" {
5151
default_snat_status {
5252
disabled = var.disable_default_snat
5353
}
54-
min_master_version = var.release_channel != null ? null : local.master_version
54+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
5555

5656
logging_service = var.logging_service
5757
monitoring_service = var.monitoring_service

modules/beta-autopilot-public-cluster/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ resource "google_container_cluster" "primary" {
5151
default_snat_status {
5252
disabled = var.disable_default_snat
5353
}
54-
min_master_version = var.release_channel != null ? null : local.master_version
54+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
5555

5656
logging_service = var.logging_service
5757
monitoring_service = var.monitoring_service

modules/beta-private-cluster-update-variant/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ resource "google_container_cluster" "primary" {
5959
default_snat_status {
6060
disabled = var.disable_default_snat
6161
}
62-
min_master_version = var.release_channel != null ? null : local.master_version
62+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
6363

6464
dynamic "cluster_telemetry" {
6565
for_each = local.cluster_telemetry_type_is_set ? [1] : []

modules/beta-private-cluster/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ resource "google_container_cluster" "primary" {
5959
default_snat_status {
6060
disabled = var.disable_default_snat
6161
}
62-
min_master_version = var.release_channel != null ? null : local.master_version
62+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
6363

6464
dynamic "cluster_telemetry" {
6565
for_each = local.cluster_telemetry_type_is_set ? [1] : []

modules/beta-public-cluster-update-variant/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ resource "google_container_cluster" "primary" {
5959
default_snat_status {
6060
disabled = var.disable_default_snat
6161
}
62-
min_master_version = var.release_channel != null ? null : local.master_version
62+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
6363

6464
dynamic "cluster_telemetry" {
6565
for_each = local.cluster_telemetry_type_is_set ? [1] : []

modules/beta-public-cluster/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ resource "google_container_cluster" "primary" {
5959
default_snat_status {
6060
disabled = var.disable_default_snat
6161
}
62-
min_master_version = var.release_channel != null ? null : local.master_version
62+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
6363

6464
dynamic "cluster_telemetry" {
6565
for_each = local.cluster_telemetry_type_is_set ? [1] : []

modules/private-cluster-update-variant/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ resource "google_container_cluster" "primary" {
5050

5151
subnetwork = "projects/${local.network_project_id}/regions/${local.region}/subnetworks/${var.subnetwork}"
5252

53-
min_master_version = var.release_channel != null ? null : local.master_version
53+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
5454

5555
logging_service = var.logging_service
5656
monitoring_service = var.monitoring_service

modules/private-cluster/cluster.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ resource "google_container_cluster" "primary" {
5050

5151
subnetwork = "projects/${local.network_project_id}/regions/${local.region}/subnetworks/${var.subnetwork}"
5252

53-
min_master_version = var.release_channel != null ? null : local.master_version
53+
min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : null
5454

5555
logging_service = var.logging_service
5656
monitoring_service = var.monitoring_service

test/fixtures/safer_cluster/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,7 @@ output "service_account" {
5555
description = "The service account to default running nodes as if not overridden in `node_pools`."
5656
value = module.example.service_account
5757
}
58+
59+
output "explicit_k8s_version" {
60+
value = module.example.explicit_k8s_version
61+
}

test/integration/safer_cluster/controls/gcloud.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
project_id = attribute('project_id')
1616
location = attribute('location')
1717
cluster_name = attribute('cluster_name')
18+
explicit_version = attribute('explicit_k8s_version')
1819

1920
control "gcloud" do
2021
title "Google Compute Engine GKE configuration"
@@ -35,6 +36,11 @@
3536
expect(data['status']).to eq 'RUNNING'
3637
end
3738

39+
it "has expected explicit version" do
40+
expect(data['currentMasterVersion']).to eq explicit_version
41+
expect(data['currentNodeVersion']).to eq explicit_version
42+
end
43+
3844
it "is regional" do
3945
expect(data['location']).to match(/^.*[1-9]$/)
4046
end

0 commit comments

Comments
 (0)