mirror of
https://github.com/ysoftdevs/terraform-aws-eks.git
synced 2026-05-01 12:54:29 +02:00
fix: Ensure the correct service CIDR and IP family is used in the rendered user data (#2963)
* fix: Ensuring the correct service CIDR and IP family is used in the rendered user data * chore: Updates from testing and validating * chore: Fix example destroy instructions * fix: Only require `cluster_service_cidr` when `create = true` * chore: Clean up commented out code and add note on check length
This commit is contained in:
@@ -9,14 +9,16 @@ See [`examples/user_data/`](https://github.com/terraform-aws-modules/terraform-a
|
||||
|
||||
| Name | Version |
|
||||
|------|---------|
|
||||
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3 |
|
||||
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3.2 |
|
||||
| <a name="requirement_cloudinit"></a> [cloudinit](#requirement\_cloudinit) | >= 2.0 |
|
||||
| <a name="requirement_null"></a> [null](#requirement\_null) | >= 3.0 |
|
||||
|
||||
## Providers
|
||||
|
||||
| Name | Version |
|
||||
|------|---------|
|
||||
| <a name="provider_cloudinit"></a> [cloudinit](#provider\_cloudinit) | >= 2.0 |
|
||||
| <a name="provider_null"></a> [null](#provider\_null) | >= 3.0 |
|
||||
|
||||
## Modules
|
||||
|
||||
@@ -26,6 +28,7 @@ No modules.
|
||||
|
||||
| Name | Type |
|
||||
|------|------|
|
||||
| [null_resource.validate_cluster_service_cidr](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) | resource |
|
||||
| [cloudinit_config.al2023_eks_managed_node_group](https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs/data-sources/config) | data source |
|
||||
| [cloudinit_config.linux_eks_managed_node_group](https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs/data-sources/config) | data source |
|
||||
|
||||
@@ -38,9 +41,10 @@ No modules.
|
||||
| <a name="input_cloudinit_pre_nodeadm"></a> [cloudinit\_pre\_nodeadm](#input\_cloudinit\_pre\_nodeadm) | Array of cloud-init document parts that are created before the nodeadm document part | <pre>list(object({<br> content = string<br> content_type = optional(string)<br> filename = optional(string)<br> merge_type = optional(string)<br> }))</pre> | `[]` | no |
|
||||
| <a name="input_cluster_auth_base64"></a> [cluster\_auth\_base64](#input\_cluster\_auth\_base64) | Base64 encoded CA of associated EKS cluster | `string` | `""` | no |
|
||||
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint of associated EKS cluster | `string` | `""` | no |
|
||||
| <a name="input_cluster_ip_family"></a> [cluster\_ip\_family](#input\_cluster\_ip\_family) | The IP family used to assign Kubernetes pod and service addresses. Valid values are `ipv4` (default) and `ipv6` | `string` | `"ipv4"` | no |
|
||||
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of the EKS cluster | `string` | `""` | no |
|
||||
| <a name="input_cluster_service_cidr"></a> [cluster\_service\_cidr](#input\_cluster\_service\_cidr) | The CIDR block (IPv4 or IPv6) used by the cluster to assign Kubernetes service IP addresses. This is derived from the cluster itself | `string` | `""` | no |
|
||||
| <a name="input_cluster_service_ipv4_cidr"></a> [cluster\_service\_ipv4\_cidr](#input\_cluster\_service\_ipv4\_cidr) | The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks | `string` | `null` | no |
|
||||
| <a name="input_cluster_service_ipv4_cidr"></a> [cluster\_service\_ipv4\_cidr](#input\_cluster\_service\_ipv4\_cidr) | [Deprecated] The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks | `string` | `null` | no |
|
||||
| <a name="input_create"></a> [create](#input\_create) | Determines whether to create user-data or not | `bool` | `true` | no |
|
||||
| <a name="input_enable_bootstrap_user_data"></a> [enable\_bootstrap\_user\_data](#input\_enable\_bootstrap\_user\_data) | Determines whether the bootstrap configurations are populated within the user data template | `bool` | `false` | no |
|
||||
| <a name="input_is_eks_managed_node_group"></a> [is\_eks\_managed\_node\_group](#input\_is\_eks\_managed\_node\_group) | Determines whether the user data is used on nodes in an EKS managed node group. Used to determine if user data will be appended or not | `bool` | `true` | no |
|
||||
|
||||
@@ -1,3 +1,17 @@
|
||||
# The `cluster_service_cidr` is required when `create == true`
|
||||
# This is a hacky way to make that logic work, otherwise Terraform always wants a value
|
||||
# and supplying any old value like `""` or `null` is not valid and will silently
|
||||
# fail to join nodes to the cluster
|
||||
resource "null_resource" "validate_cluster_service_cidr" {
|
||||
lifecycle {
|
||||
precondition {
|
||||
# The length 6 is currently arbitrary, but it's a safe bet that the CIDR will be longer than that
|
||||
# The main point is that a value needs to be provided when `create = true`
|
||||
condition = var.create ? length(local.cluster_service_cidr) > 6 : true
|
||||
error_message = "`cluster_service_cidr` is required when `create = true`."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
template_path = {
|
||||
@@ -7,6 +21,8 @@ locals {
|
||||
windows = "${path.module}/../../templates/windows_user_data.tpl"
|
||||
}
|
||||
|
||||
cluster_service_cidr = try(coalesce(var.cluster_service_ipv4_cidr, var.cluster_service_cidr), "")
|
||||
|
||||
user_data = base64encode(templatefile(
|
||||
coalesce(var.user_data_template_path, local.template_path[var.platform]),
|
||||
{
|
||||
@@ -18,14 +34,15 @@ locals {
|
||||
cluster_endpoint = var.cluster_endpoint
|
||||
cluster_auth_base64 = var.cluster_auth_base64
|
||||
|
||||
# Required by AL2023
|
||||
cluster_service_cidr = var.cluster_service_cidr
|
||||
cluster_service_cidr = local.cluster_service_cidr
|
||||
cluster_ip_family = var.cluster_ip_family
|
||||
# Bottlerocket
|
||||
cluster_dns_ip = try(cidrhost(local.cluster_service_cidr, 10), "")
|
||||
|
||||
# Optional
|
||||
cluster_service_ipv4_cidr = var.cluster_service_ipv4_cidr != null ? var.cluster_service_ipv4_cidr : ""
|
||||
bootstrap_extra_args = var.bootstrap_extra_args
|
||||
pre_bootstrap_user_data = var.pre_bootstrap_user_data
|
||||
post_bootstrap_user_data = var.post_bootstrap_user_data
|
||||
bootstrap_extra_args = var.bootstrap_extra_args
|
||||
pre_bootstrap_user_data = var.pre_bootstrap_user_data
|
||||
post_bootstrap_user_data = var.post_bootstrap_user_data
|
||||
}
|
||||
))
|
||||
|
||||
|
||||
@@ -40,16 +40,21 @@ variable "cluster_auth_base64" {
|
||||
default = ""
|
||||
}
|
||||
|
||||
# Currently only used by AL2023 since it can be IPv4 or IPv6
|
||||
variable "cluster_service_cidr" {
|
||||
description = "The CIDR block (IPv4 or IPv6) used by the cluster to assign Kubernetes service IP addresses. This is derived from the cluster itself"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
|
||||
# Not used by AL2023
|
||||
variable "cluster_ip_family" {
|
||||
description = "The IP family used to assign Kubernetes pod and service addresses. Valid values are `ipv4` (default) and `ipv6`"
|
||||
type = string
|
||||
default = "ipv4"
|
||||
}
|
||||
|
||||
# TODO - remove at next breaking change
|
||||
variable "cluster_service_ipv4_cidr" {
|
||||
description = "The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks"
|
||||
description = "[Deprecated] The CIDR block to assign Kubernetes service IP addresses from. If you don't specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks"
|
||||
type = string
|
||||
default = null
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
terraform {
|
||||
required_version = ">= 1.3"
|
||||
required_version = ">= 1.3.2"
|
||||
|
||||
required_providers {
|
||||
cloudinit = {
|
||||
source = "hashicorp/cloudinit"
|
||||
version = ">= 2.0"
|
||||
}
|
||||
null = {
|
||||
source = "hashicorp/null"
|
||||
version = ">= 3.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user