From feee18dd423b1e76f8a5119206f23306e5879b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Charest?= Date: Fri, 6 Oct 2023 09:20:13 -0400 Subject: [PATCH] feat: Add support for `allowed_instance_types` on self-managed nodegroup ASG (#2757) Co-authored-by: Bryant Biggs --- .pre-commit-config.yaml | 2 +- README.md | 4 +- examples/complete/README.md | 4 +- examples/complete/versions.tf | 2 +- examples/eks_managed_node_group/README.md | 4 +- examples/eks_managed_node_group/versions.tf | 2 +- examples/fargate_profile/README.md | 4 +- examples/fargate_profile/versions.tf | 2 +- examples/karpenter/README.md | 6 +-- examples/karpenter/versions.tf | 2 +- examples/outposts/README.md | 4 +- examples/outposts/prerequisites/versions.tf | 2 +- examples/outposts/versions.tf | 2 +- examples/self_managed_node_group/README.md | 4 +- examples/self_managed_node_group/main.tf | 52 ++++++++++++++++++++ examples/self_managed_node_group/versions.tf | 2 +- modules/eks-managed-node-group/README.md | 4 +- modules/eks-managed-node-group/versions.tf | 2 +- modules/fargate-profile/README.md | 4 +- modules/fargate-profile/versions.tf | 2 +- modules/karpenter/README.md | 4 +- modules/karpenter/versions.tf | 2 +- modules/self-managed-node-group/main.tf | 5 +- versions.tf | 2 +- 24 files changed, 88 insertions(+), 35 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dabb150..b5adebd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/antonbabenko/pre-commit-terraform - rev: v1.80.0 + rev: v1.83.4 hooks: - id: terraform_fmt - id: terraform_validate diff --git a/README.md b/README.md index 2d53af9..88f8741 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ We are grateful to the community for contributing bugfixes and improvements! Ple | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | | [time](#requirement\_time) | >= 0.9 | | [tls](#requirement\_tls) | >= 3.0 | @@ -232,7 +232,7 @@ We are grateful to the community for contributing bugfixes and improvements! Ple | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | | [kubernetes](#provider\_kubernetes) | >= 2.10 | | [time](#provider\_time) | >= 0.9 | | [tls](#provider\_tls) | >= 3.0 | diff --git a/examples/complete/README.md b/examples/complete/README.md index c03547b..0fd4313 100644 --- a/examples/complete/README.md +++ b/examples/complete/README.md @@ -34,14 +34,14 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/examples/complete/versions.tf b/examples/complete/versions.tf index aeb892f..d2ec4a8 100644 --- a/examples/complete/versions.tf +++ b/examples/complete/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } kubernetes = { source = "hashicorp/kubernetes" diff --git a/examples/eks_managed_node_group/README.md b/examples/eks_managed_node_group/README.md index 0902733..c5278e0 100644 --- a/examples/eks_managed_node_group/README.md +++ b/examples/eks_managed_node_group/README.md @@ -30,14 +30,14 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/examples/eks_managed_node_group/versions.tf b/examples/eks_managed_node_group/versions.tf index aeb892f..d2ec4a8 100644 --- a/examples/eks_managed_node_group/versions.tf +++ b/examples/eks_managed_node_group/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } kubernetes = { source = "hashicorp/kubernetes" diff --git a/examples/fargate_profile/README.md b/examples/fargate_profile/README.md index 6ca254d..9d41ed4 100644 --- a/examples/fargate_profile/README.md +++ b/examples/fargate_profile/README.md @@ -20,7 +20,7 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [helm](#requirement\_helm) | >= 2.7 | | [null](#requirement\_null) | >= 3.0 | @@ -28,7 +28,7 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/examples/fargate_profile/versions.tf b/examples/fargate_profile/versions.tf index 17db7d8..10d7878 100644 --- a/examples/fargate_profile/versions.tf +++ b/examples/fargate_profile/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } helm = { source = "hashicorp/helm" diff --git a/examples/karpenter/README.md b/examples/karpenter/README.md index d336b10..6549a3e 100644 --- a/examples/karpenter/README.md +++ b/examples/karpenter/README.md @@ -52,7 +52,7 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [helm](#requirement\_helm) | >= 2.7 | | [kubectl](#requirement\_kubectl) | >= 1.14 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | @@ -62,8 +62,8 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | -| [aws.virginia](#provider\_aws.virginia) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | +| [aws.virginia](#provider\_aws.virginia) | >= 4.57 | | [helm](#provider\_helm) | >= 2.7 | | [kubectl](#provider\_kubectl) | >= 1.14 | diff --git a/examples/karpenter/versions.tf b/examples/karpenter/versions.tf index cab7b21..f1f0ee4 100644 --- a/examples/karpenter/versions.tf +++ b/examples/karpenter/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } kubernetes = { source = "hashicorp/kubernetes" diff --git a/examples/outposts/README.md b/examples/outposts/README.md index 3368494..ff2542c 100644 --- a/examples/outposts/README.md +++ b/examples/outposts/README.md @@ -42,14 +42,14 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | | [kubernetes](#provider\_kubernetes) | >= 2.10 | ## Modules diff --git a/examples/outposts/prerequisites/versions.tf b/examples/outposts/prerequisites/versions.tf index 5f058b4..01d187a 100644 --- a/examples/outposts/prerequisites/versions.tf +++ b/examples/outposts/prerequisites/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.34" + version = ">= 4.57" } } } diff --git a/examples/outposts/versions.tf b/examples/outposts/versions.tf index aeb892f..d2ec4a8 100644 --- a/examples/outposts/versions.tf +++ b/examples/outposts/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } kubernetes = { source = "hashicorp/kubernetes" diff --git a/examples/self_managed_node_group/README.md b/examples/self_managed_node_group/README.md index c5ddbc3..5d849be 100644 --- a/examples/self_managed_node_group/README.md +++ b/examples/self_managed_node_group/README.md @@ -26,14 +26,14 @@ Note that this example may create resources which cost money. Run `terraform des | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/examples/self_managed_node_group/main.tf b/examples/self_managed_node_group/main.tf index 87be519..d359226 100644 --- a/examples/self_managed_node_group/main.tf +++ b/examples/self_managed_node_group/main.tf @@ -216,6 +216,58 @@ module "eks" { } } + instance_attributes = { + name = "instance-attributes" + + min_size = 1 + max_size = 2 + desired_size = 1 + + bootstrap_extra_args = "--kubelet-extra-args '--node-labels=node.kubernetes.io/lifecycle=spot'" + + instance_type = null + + # launch template configuration + instance_requirements = { + cpu_manufacturers = ["intel"] + instance_generations = ["current", "previous"] + spot_max_price_percentage_over_lowest_price = 100 + + vcpu_count = { + min = 1 + } + + allowed_instance_types = ["t*", "m*"] + } + + use_mixed_instances_policy = true + mixed_instances_policy = { + instances_distribution = { + on_demand_base_capacity = 0 + on_demand_percentage_above_base_capacity = 0 + on_demand_allocation_strategy = "lowest-price" + spot_allocation_strategy = "price-capacity-optimized" + } + + # ASG configuration + override = [ + { + instance_requirements = { + cpu_manufacturers = ["intel"] + instance_generations = ["current", "previous"] + spot_max_price_percentage_over_lowest_price = 100 + + vcpu_count = { + min = 1 + } + + allowed_instance_types = ["t*", "m*"] + } + } + ] + } + } + metadata_options = { http_endpoint = "enabled" http_tokens = "required" diff --git a/examples/self_managed_node_group/versions.tf b/examples/self_managed_node_group/versions.tf index aeb892f..d2ec4a8 100644 --- a/examples/self_managed_node_group/versions.tf +++ b/examples/self_managed_node_group/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } kubernetes = { source = "hashicorp/kubernetes" diff --git a/modules/eks-managed-node-group/README.md b/modules/eks-managed-node-group/README.md index 8dcb95f..69d33ae 100644 --- a/modules/eks-managed-node-group/README.md +++ b/modules/eks-managed-node-group/README.md @@ -64,13 +64,13 @@ module "eks_managed_node_group" { | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/modules/eks-managed-node-group/versions.tf b/modules/eks-managed-node-group/versions.tf index 55eff62..01d187a 100644 --- a/modules/eks-managed-node-group/versions.tf +++ b/modules/eks-managed-node-group/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } } } diff --git a/modules/fargate-profile/README.md b/modules/fargate-profile/README.md index cc0bab2..d841524 100644 --- a/modules/fargate-profile/README.md +++ b/modules/fargate-profile/README.md @@ -29,13 +29,13 @@ module "fargate_profile" { | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/modules/fargate-profile/versions.tf b/modules/fargate-profile/versions.tf index 55eff62..01d187a 100644 --- a/modules/fargate-profile/versions.tf +++ b/modules/fargate-profile/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } } } diff --git a/modules/karpenter/README.md b/modules/karpenter/README.md index 8e9b6dc..f7b57c0 100644 --- a/modules/karpenter/README.md +++ b/modules/karpenter/README.md @@ -100,13 +100,13 @@ module "karpenter" { | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.0 | -| [aws](#requirement\_aws) | >= 4.47 | +| [aws](#requirement\_aws) | >= 4.57 | ## Providers | Name | Version | |------|---------| -| [aws](#provider\_aws) | >= 4.47 | +| [aws](#provider\_aws) | >= 4.57 | ## Modules diff --git a/modules/karpenter/versions.tf b/modules/karpenter/versions.tf index 55eff62..01d187a 100644 --- a/modules/karpenter/versions.tf +++ b/modules/karpenter/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } } } diff --git a/modules/self-managed-node-group/main.tf b/modules/self-managed-node-group/main.tf index 049e32d..e29e52a 100644 --- a/modules/self-managed-node-group/main.tf +++ b/modules/self-managed-node-group/main.tf @@ -527,8 +527,9 @@ resource "aws_autoscaling_group" "this" { } } - accelerator_types = try(instance_requirements.value.accelerator_types, []) - bare_metal = try(instance_requirements.value.bare_metal, null) + accelerator_types = try(instance_requirements.value.accelerator_types, []) + allowed_instance_types = try(instance_requirements.value.allowed_instance_types, null) + bare_metal = try(instance_requirements.value.bare_metal, null) dynamic "baseline_ebs_bandwidth_mbps" { for_each = try([instance_requirements.value.baseline_ebs_bandwidth_mbps], []) diff --git a/versions.tf b/versions.tf index dfe867e..e3bdcbf 100644 --- a/versions.tf +++ b/versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = ">= 4.47" + version = ">= 4.57" } tls = { source = "hashicorp/tls"