mirror of
https://github.com/ysoftdevs/terraform-aws-eks.git
synced 2026-05-01 12:54:29 +02:00
feat: Propagate ami_type to self-managed node group; allow using ami_type only (#3030)
This commit is contained in:
@@ -36,7 +36,8 @@ No modules.
|
||||
|
||||
| Name | Description | Type | Default | Required |
|
||||
|------|-------------|------|---------|:--------:|
|
||||
| <a name="input_bootstrap_extra_args"></a> [bootstrap\_extra\_args](#input\_bootstrap\_extra\_args) | Additional arguments passed to the bootstrap script. When `platform` = `bottlerocket`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data | `string` | `""` | no |
|
||||
| <a name="input_ami_type"></a> [ami\_type](#input\_ami\_type) | Type of Amazon Machine Image (AMI) associated with the EKS Node Group. See the [AWS documentation](https://docs.aws.amazon.com/eks/latest/APIReference/API_Nodegroup.html#AmazonEKS-Type-Nodegroup-amiType) for valid values | `string` | `null` | no |
|
||||
| <a name="input_bootstrap_extra_args"></a> [bootstrap\_extra\_args](#input\_bootstrap\_extra\_args) | Additional arguments passed to the bootstrap script. When `ami_type` = `BOTTLEROCKET_*`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data | `string` | `""` | no |
|
||||
| <a name="input_cloudinit_post_nodeadm"></a> [cloudinit\_post\_nodeadm](#input\_cloudinit\_post\_nodeadm) | Array of cloud-init document parts that are created after 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_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 |
|
||||
@@ -48,14 +49,15 @@ No modules.
|
||||
| <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 |
|
||||
| <a name="input_platform"></a> [platform](#input\_platform) | Identifies if the OS platform is `bottlerocket`, `linux`, or `windows` based | `string` | `"linux"` | no |
|
||||
| <a name="input_post_bootstrap_user_data"></a> [post\_bootstrap\_user\_data](#input\_post\_bootstrap\_user\_data) | User data that is appended to the user data script after of the EKS bootstrap script. Not used when `platform` = `bottlerocket` | `string` | `""` | no |
|
||||
| <a name="input_pre_bootstrap_user_data"></a> [pre\_bootstrap\_user\_data](#input\_pre\_bootstrap\_user\_data) | User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `platform` = `bottlerocket` | `string` | `""` | no |
|
||||
| <a name="input_platform"></a> [platform](#input\_platform) | [DEPRECATED - use `ami_type` instead. Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023`, or `windows` | `string` | `"linux"` | no |
|
||||
| <a name="input_post_bootstrap_user_data"></a> [post\_bootstrap\_user\_data](#input\_post\_bootstrap\_user\_data) | User data that is appended to the user data script after of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*` | `string` | `""` | no |
|
||||
| <a name="input_pre_bootstrap_user_data"></a> [pre\_bootstrap\_user\_data](#input\_pre\_bootstrap\_user\_data) | User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*` | `string` | `""` | no |
|
||||
| <a name="input_user_data_template_path"></a> [user\_data\_template\_path](#input\_user\_data\_template\_path) | Path to a local, custom user data template file to use when rendering user data | `string` | `""` | no |
|
||||
|
||||
## Outputs
|
||||
|
||||
| Name | Description |
|
||||
|------|-------------|
|
||||
| <a name="output_platform"></a> [platform](#output\_platform) | [DEPRECATED - Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023, or `windows |
|
||||
| <a name="output_user_data"></a> [user\_data](#output\_user\_data) | Base64 encoded user data rendered for the provided inputs |
|
||||
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
|
||||
|
||||
@@ -14,6 +14,27 @@ resource "null_resource" "validate_cluster_service_cidr" {
|
||||
}
|
||||
|
||||
locals {
|
||||
# Converts AMI type into user data type that represents the underlying format (bash, toml, PS1, nodeadm)
|
||||
# TODO - platform will be removed in v21.0 and only `ami_type` will be valid
|
||||
ami_type_to_user_data_type = {
|
||||
AL2_x86_64 = "linux"
|
||||
AL2_x86_64_GPU = "linux"
|
||||
AL2_ARM_64 = "linux"
|
||||
BOTTLEROCKET_ARM_64 = "bottlerocket"
|
||||
BOTTLEROCKET_x86_64 = "bottlerocket"
|
||||
BOTTLEROCKET_ARM_64_NVIDIA = "bottlerocket"
|
||||
BOTTLEROCKET_x86_64_NVIDIA = "bottlerocket"
|
||||
WINDOWS_CORE_2019_x86_64 = "windows"
|
||||
WINDOWS_FULL_2019_x86_64 = "windows"
|
||||
WINDOWS_CORE_2022_x86_64 = "windows"
|
||||
WINDOWS_FULL_2022_x86_64 = "windows"
|
||||
AL2023_x86_64_STANDARD = "al2023"
|
||||
AL2023_ARM_64_STANDARD = "al2023"
|
||||
}
|
||||
# Try to use `ami_type` first, but fall back to current, default behavior
|
||||
# TODO - will be removed in v21.0
|
||||
user_data_type = try(local.ami_type_to_user_data_type[var.ami_type], var.platform)
|
||||
|
||||
template_path = {
|
||||
al2023 = "${path.module}/../../templates/al2023_user_data.tpl"
|
||||
bottlerocket = "${path.module}/../../templates/bottlerocket_user_data.tpl"
|
||||
@@ -24,7 +45,7 @@ locals {
|
||||
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]),
|
||||
coalesce(var.user_data_template_path, local.template_path[local.user_data_type]),
|
||||
{
|
||||
# https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-custom-ami
|
||||
enable_bootstrap_user_data = var.enable_bootstrap_user_data
|
||||
@@ -46,18 +67,18 @@ locals {
|
||||
}
|
||||
))
|
||||
|
||||
platform = {
|
||||
user_data_type_to_rendered = {
|
||||
al2023 = {
|
||||
user_data = var.create ? try(data.cloudinit_config.al2023_eks_managed_node_group[0].rendered, local.user_data) : ""
|
||||
}
|
||||
bottlerocket = {
|
||||
user_data = var.create && var.platform == "bottlerocket" && (var.enable_bootstrap_user_data || var.user_data_template_path != "" || var.bootstrap_extra_args != "") ? local.user_data : ""
|
||||
user_data = var.create && local.user_data_type == "bottlerocket" && (var.enable_bootstrap_user_data || var.user_data_template_path != "" || var.bootstrap_extra_args != "") ? local.user_data : ""
|
||||
}
|
||||
linux = {
|
||||
user_data = var.create ? try(data.cloudinit_config.linux_eks_managed_node_group[0].rendered, local.user_data) : ""
|
||||
}
|
||||
windows = {
|
||||
user_data = var.create && var.platform == "windows" && (var.enable_bootstrap_user_data || var.user_data_template_path != "" || var.pre_bootstrap_user_data != "") ? local.user_data : ""
|
||||
user_data = var.create && local.user_data_type == "windows" && (var.enable_bootstrap_user_data || var.user_data_template_path != "" || var.pre_bootstrap_user_data != "") ? local.user_data : ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,7 +91,7 @@ locals {
|
||||
# See docs for more details -> https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-user-data
|
||||
|
||||
data "cloudinit_config" "linux_eks_managed_node_group" {
|
||||
count = var.create && var.platform == "linux" && var.is_eks_managed_node_group && !var.enable_bootstrap_user_data && var.pre_bootstrap_user_data != "" && var.user_data_template_path == "" ? 1 : 0
|
||||
count = var.create && local.user_data_type == "linux" && var.is_eks_managed_node_group && !var.enable_bootstrap_user_data && var.pre_bootstrap_user_data != "" && var.user_data_template_path == "" ? 1 : 0
|
||||
|
||||
base64_encode = true
|
||||
gzip = false
|
||||
@@ -101,7 +122,7 @@ locals {
|
||||
}
|
||||
|
||||
data "cloudinit_config" "al2023_eks_managed_node_group" {
|
||||
count = var.create && var.platform == "al2023" && length(local.nodeadm_cloudinit) > 0 ? 1 : 0
|
||||
count = var.create && local.user_data_type == "al2023" && length(local.nodeadm_cloudinit) > 0 ? 1 : 0
|
||||
|
||||
base64_encode = true
|
||||
gzip = false
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
output "user_data" {
|
||||
description = "Base64 encoded user data rendered for the provided inputs"
|
||||
value = try(local.platform[var.platform].user_data, null)
|
||||
value = try(local.user_data_type_to_rendered[local.user_data_type].user_data, null)
|
||||
}
|
||||
|
||||
output "platform" {
|
||||
description = "[DEPRECATED - Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023, or `windows`"
|
||||
value = local.user_data_type
|
||||
}
|
||||
|
||||
@@ -5,11 +5,17 @@ variable "create" {
|
||||
}
|
||||
|
||||
variable "platform" {
|
||||
description = "Identifies if the OS platform is `bottlerocket`, `linux`, or `windows` based"
|
||||
description = "[DEPRECATED - use `ami_type` instead. Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023`, or `windows`"
|
||||
type = string
|
||||
default = "linux"
|
||||
}
|
||||
|
||||
variable "ami_type" {
|
||||
description = "Type of Amazon Machine Image (AMI) associated with the EKS Node Group. See the [AWS documentation](https://docs.aws.amazon.com/eks/latest/APIReference/API_Nodegroup.html#AmazonEKS-Type-Nodegroup-amiType) for valid values"
|
||||
type = string
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "enable_bootstrap_user_data" {
|
||||
description = "Determines whether the bootstrap configurations are populated within the user data template"
|
||||
type = bool
|
||||
@@ -60,19 +66,19 @@ variable "cluster_service_ipv4_cidr" {
|
||||
}
|
||||
|
||||
variable "pre_bootstrap_user_data" {
|
||||
description = "User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `platform` = `bottlerocket`"
|
||||
description = "User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*`"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "post_bootstrap_user_data" {
|
||||
description = "User data that is appended to the user data script after of the EKS bootstrap script. Not used when `platform` = `bottlerocket`"
|
||||
description = "User data that is appended to the user data script after of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*`"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "bootstrap_extra_args" {
|
||||
description = "Additional arguments passed to the bootstrap script. When `platform` = `bottlerocket`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data"
|
||||
description = "Additional arguments passed to the bootstrap script. When `ami_type` = `BOTTLEROCKET_*`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user