diff --git a/README.md b/README.md index 1cff8f1df..53ea9f7e0 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ module "gke" { local_ssd_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -236,7 +236,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/autogen/main/README.md b/autogen/main/README.md index 214086a46..f933b18d2 100644 --- a/autogen/main/README.md +++ b/autogen/main/README.md @@ -100,7 +100,7 @@ module "gke" { {% endif %} disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -188,7 +188,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/autogen/main/cluster.tf.tmpl b/autogen/main/cluster.tf.tmpl index 92f3b799b..818116c8e 100644 --- a/autogen/main/cluster.tf.tmpl +++ b/autogen/main/cluster.tf.tmpl @@ -274,11 +274,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - {% if beta_cluster %} - image_type = lookup(var.node_pools[0], "image_type", lookup(var.node_pools[0], "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") - {% else %} - image_type = lookup(var.node_pools[0], "image_type", "COS") - {% endif %} + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -553,11 +549,7 @@ resource "google_container_node_pool" "pools" { {% endif %} node_config { - {% if beta_cluster %} - image_type = lookup(each.value, "image_type", lookup(each.value, "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") - {% else %} - image_type = lookup(each.value, "image_type", "COS") - {% endif %} + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/cluster.tf b/cluster.tf index f4899cf1c..ba1f0dd31 100644 --- a/cluster.tf +++ b/cluster.tf @@ -145,7 +145,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -267,7 +267,7 @@ resource "google_container_node_pool" "pools" { node_config { - image_type = lookup(each.value, "image_type", "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/docs/upgrading_to_v19.0.md b/docs/upgrading_to_v19.0.md index a82d35f6e..fa0a46be3 100644 --- a/docs/upgrading_to_v19.0.md +++ b/docs/upgrading_to_v19.0.md @@ -62,6 +62,26 @@ module "gke" { } ``` +### ⚠ Default node image changed to COS_CONTAINERD + +⚠ This change in default may cause disruption to your workload as it will delete and recreate nodes in the node pool ⚠ + +The `COS` image is [deprecated](https://cloud.google.com/kubernetes-engine/docs/concepts/node-images#cos-variants), therefore the default has been updated to `COS_CONTAINERD`. If you want to keep using the `COS` image for your node pool, you can override the default value. + + +```diff +module "gke" { + source = "../../modules/safer-cluster" + + node_pools = [ + { + name = "pool-01" ++ image_type = "COS" + } + ] +} +``` + ### node_pools_versions is now keyed by node-pool name The `node_pools_versions` output is now an object keyed by node pool name, rather than a list as previously. diff --git a/modules/beta-private-cluster-update-variant/README.md b/modules/beta-private-cluster-update-variant/README.md index 92c1fb088..8eee68ef9 100644 --- a/modules/beta-private-cluster-update-variant/README.md +++ b/modules/beta-private-cluster-update-variant/README.md @@ -89,7 +89,7 @@ module "gke" { local_ssd_ephemeral_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -310,7 +310,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/modules/beta-private-cluster-update-variant/cluster.tf b/modules/beta-private-cluster-update-variant/cluster.tf index c6a961440..4d062e91a 100644 --- a/modules/beta-private-cluster-update-variant/cluster.tf +++ b/modules/beta-private-cluster-update-variant/cluster.tf @@ -245,7 +245,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", lookup(var.node_pools[0], "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -496,7 +496,7 @@ resource "google_container_node_pool" "pools" { } node_config { - image_type = lookup(each.value, "image_type", lookup(each.value, "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/modules/beta-private-cluster/README.md b/modules/beta-private-cluster/README.md index bab4d3531..ccf6d6061 100644 --- a/modules/beta-private-cluster/README.md +++ b/modules/beta-private-cluster/README.md @@ -67,7 +67,7 @@ module "gke" { local_ssd_ephemeral_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -288,7 +288,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/modules/beta-private-cluster/cluster.tf b/modules/beta-private-cluster/cluster.tf index 0dacff4fa..e114591ca 100644 --- a/modules/beta-private-cluster/cluster.tf +++ b/modules/beta-private-cluster/cluster.tf @@ -245,7 +245,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", lookup(var.node_pools[0], "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -410,7 +410,7 @@ resource "google_container_node_pool" "pools" { } node_config { - image_type = lookup(each.value, "image_type", lookup(each.value, "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/modules/beta-public-cluster-update-variant/README.md b/modules/beta-public-cluster-update-variant/README.md index 709c74545..e7d3b7e2d 100644 --- a/modules/beta-public-cluster-update-variant/README.md +++ b/modules/beta-public-cluster-update-variant/README.md @@ -83,7 +83,7 @@ module "gke" { local_ssd_ephemeral_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -297,7 +297,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/modules/beta-public-cluster-update-variant/cluster.tf b/modules/beta-public-cluster-update-variant/cluster.tf index cf26ad58c..da6c6849f 100644 --- a/modules/beta-public-cluster-update-variant/cluster.tf +++ b/modules/beta-public-cluster-update-variant/cluster.tf @@ -245,7 +245,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", lookup(var.node_pools[0], "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -477,7 +477,7 @@ resource "google_container_node_pool" "pools" { } node_config { - image_type = lookup(each.value, "image_type", lookup(each.value, "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/modules/beta-public-cluster/README.md b/modules/beta-public-cluster/README.md index 400fb7846..42dd34965 100644 --- a/modules/beta-public-cluster/README.md +++ b/modules/beta-public-cluster/README.md @@ -61,7 +61,7 @@ module "gke" { local_ssd_ephemeral_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -275,7 +275,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/modules/beta-public-cluster/cluster.tf b/modules/beta-public-cluster/cluster.tf index 3cef8934a..102cdd1aa 100644 --- a/modules/beta-public-cluster/cluster.tf +++ b/modules/beta-public-cluster/cluster.tf @@ -245,7 +245,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", lookup(var.node_pools[0], "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -391,7 +391,7 @@ resource "google_container_node_pool" "pools" { } node_config { - image_type = lookup(each.value, "image_type", lookup(each.value, "sandbox_enabled", var.sandbox_enabled) ? "COS_CONTAINERD" : "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/modules/private-cluster-update-variant/README.md b/modules/private-cluster-update-variant/README.md index a0eb953d7..47da50303 100644 --- a/modules/private-cluster-update-variant/README.md +++ b/modules/private-cluster-update-variant/README.md @@ -84,7 +84,7 @@ module "gke" { local_ssd_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -270,7 +270,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/modules/private-cluster-update-variant/cluster.tf b/modules/private-cluster-update-variant/cluster.tf index 868306a33..f1b80fd7e 100644 --- a/modules/private-cluster-update-variant/cluster.tf +++ b/modules/private-cluster-update-variant/cluster.tf @@ -145,7 +145,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -365,7 +365,7 @@ resource "google_container_node_pool" "pools" { node_config { - image_type = lookup(each.value, "image_type", "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/modules/private-cluster/README.md b/modules/private-cluster/README.md index 3f7192f45..efce04e14 100644 --- a/modules/private-cluster/README.md +++ b/modules/private-cluster/README.md @@ -62,7 +62,7 @@ module "gke" { local_ssd_count = 0 disk_size_gb = 100 disk_type = "pd-standard" - image_type = "COS" + image_type = "COS_CONTAINERD" auto_repair = true auto_upgrade = true service_account = "project-service-account@.iam.gserviceaccount.com" @@ -248,7 +248,7 @@ The node_pools variable takes the following parameters: | enable_integrity_monitoring | Enables monitoring and attestation of the boot integrity of the instance. The attestation is performed against the integrity policy baseline. This baseline is initially derived from the implicitly trusted boot image when the instance is created. | true | Optional | | enable_secure_boot | Secure Boot helps ensure that the system only runs authentic software by verifying the digital signature of all boot components, and halting the boot process if signature verification fails. | false | Optional | | gpu_partition_size | Size of partitions to create on the GPU | null | Optional | -| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS | Optional | +| image_type | The image type to use for this node. Note that changing the image type will delete and recreate all nodes in the node pool | COS_CONTAINERD | Optional | | initial_node_count | The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Changing this will force recreation of the resource. Defaults to the value of min_count | " " | Optional | | key | The key required for the taint | | Required | | local_ssd_count | The amount of local SSD disks that will be attached to each cluster node and may be used as a `hostpath` volume or a `local` PersistentVolume. | 0 | Optional | diff --git a/modules/private-cluster/cluster.tf b/modules/private-cluster/cluster.tf index 09e6e7dce..e70010180 100644 --- a/modules/private-cluster/cluster.tf +++ b/modules/private-cluster/cluster.tf @@ -145,7 +145,7 @@ resource "google_container_cluster" "primary" { initial_node_count = var.initial_node_count node_config { - image_type = lookup(var.node_pools[0], "image_type", "COS") + image_type = lookup(var.node_pools[0], "image_type", "COS_CONTAINERD") machine_type = lookup(var.node_pools[0], "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") @@ -280,7 +280,7 @@ resource "google_container_node_pool" "pools" { node_config { - image_type = lookup(each.value, "image_type", "COS") + image_type = lookup(each.value, "image_type", "COS_CONTAINERD") machine_type = lookup(each.value, "machine_type", "e2-medium") min_cpu_platform = lookup(var.node_pools[0], "min_cpu_platform", "") labels = merge( diff --git a/test/integration/node_pool/controls/gcloud.rb b/test/integration/node_pool/controls/gcloud.rb index 8858350a8..3367162f7 100644 --- a/test/integration/node_pool/controls/gcloud.rb +++ b/test/integration/node_pool/controls/gcloud.rb @@ -86,6 +86,17 @@ ) end + it "has the expected image type" do + expect(data['nodePools']).to include( + including( + "name" => "pool-01", + "config" => including( + "imageType" => "COS_CONTAINERD", + ), + ) + ) + end + it "has autoscaling enabled" do expect(data['nodePools']).to include( including(