Skip to content

Commit 523144e

Browse files
authored
feat: Add support for allowing EFA network interfaces (#1980)
1 parent 6212461 commit 523144e

3 files changed

Lines changed: 46 additions & 9 deletions

File tree

  • examples/self_managed_node_group
  • modules

examples/self_managed_node_group/main.tf

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,37 @@ module "eks" {
146146
}
147147
}
148148

149+
efa = {
150+
min_size = 1
151+
max_size = 2
152+
desired_size = 1
153+
154+
# aws ec2 describe-instance-types --region eu-west-1 --filters Name=network-info.efa-supported,Values=true --query "InstanceTypes[*].[InstanceType]" --output text | sort
155+
instance_type = "c5n.9xlarge"
156+
157+
post_bootstrap_user_data = <<-EOT
158+
159+
# Install EFA
160+
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-latest.tar.gz
161+
tar -xf aws-efa-installer-latest.tar.gz && cd aws-efa-installer
162+
./efa_installer.sh -y --minimal
163+
fi_info -p efa -t FI_EP_RDM
164+
165+
# Disable ptrace
166+
sysctl -w kernel.yama.ptrace_scope=0
167+
EOT
168+
169+
network_interfaces = [
170+
{
171+
description = "EFA interface example"
172+
delete_on_termination = true
173+
device_index = 0
174+
associate_public_ip_address = false
175+
interface_type = "efa"
176+
}
177+
]
178+
}
179+
149180
# Complete
150181
complete = {
151182
name = "complete-self-mng"

modules/eks-managed-node-group/main.tf

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ locals {
3838
use_custom_launch_template = var.create_launch_template || var.launch_template_name != ""
3939

4040
launch_template_name_int = coalesce(var.launch_template_name, "${var.name}-eks-node-group")
41+
42+
security_group_ids = compact(concat([try(aws_security_group.this[0].id, ""), var.cluster_primary_security_group_id], var.vpc_security_group_ids))
4143
}
4244

4345
resource "aws_launch_template" "this" {
@@ -54,7 +56,7 @@ resource "aws_launch_template" "this" {
5456
key_name = var.key_name
5557
user_data = module.user_data.user_data
5658

57-
vpc_security_group_ids = compact(concat([try(aws_security_group.this[0].id, ""), var.cluster_primary_security_group_id], var.vpc_security_group_ids))
59+
vpc_security_group_ids = length(var.network_interfaces) > 0 ? [] : local.security_group_ids
5860

5961
default_version = var.launch_template_default_version
6062
update_default_version = var.update_launch_template_default_version
@@ -208,16 +210,17 @@ resource "aws_launch_template" "this" {
208210
delete_on_termination = lookup(network_interfaces.value, "delete_on_termination", null)
209211
description = lookup(network_interfaces.value, "description", null)
210212
device_index = lookup(network_interfaces.value, "device_index", null)
211-
ipv4_addresses = lookup(network_interfaces.value, "ipv4_addresses", null) != null ? network_interfaces.value.ipv4_addresses : []
213+
interface_type = lookup(network_interfaces.value, "interface_type", null)
214+
ipv4_addresses = try(network_interfaces.value.ipv4_addresses, [])
212215
ipv4_address_count = lookup(network_interfaces.value, "ipv4_address_count", null)
213-
ipv6_addresses = lookup(network_interfaces.value, "ipv6_addresses", null) != null ? network_interfaces.value.ipv6_addresses : []
216+
ipv6_addresses = try(network_interfaces.value.ipv6_addresses, [])
214217
ipv6_address_count = lookup(network_interfaces.value, "ipv6_address_count", null)
215218
network_interface_id = lookup(network_interfaces.value, "network_interface_id", null)
216219
private_ip_address = lookup(network_interfaces.value, "private_ip_address", null)
217-
security_groups = lookup(network_interfaces.value, "security_groups", null) != null ? network_interfaces.value.security_groups : []
220+
security_groups = compact(concat(try(network_interfaces.value.security_groups, []), local.security_group_ids))
218221
# Set on EKS managed node group, will fail if set here
219222
# https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html#launch-template-basics
220-
# subnet_id = lookup(network_interfaces.value, "subnet_id", null)
223+
# subnet_id = lookup(network_interfaces.value, "subnet_id", null)
221224
}
222225
}
223226

modules/self-managed-node-group/main.tf

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ module "user_data" {
4444

4545
locals {
4646
launch_template_name_int = coalesce(var.launch_template_name, "${var.name}-node-group")
47+
48+
security_group_ids = compact(concat([try(aws_security_group.this[0].id, ""), var.cluster_primary_security_group_id], var.vpc_security_group_ids))
4749
}
4850

4951
resource "aws_launch_template" "this" {
@@ -59,7 +61,7 @@ resource "aws_launch_template" "this" {
5961
key_name = var.key_name
6062
user_data = module.user_data.user_data
6163

62-
vpc_security_group_ids = compact(concat([try(aws_security_group.this[0].id, ""), var.cluster_primary_security_group_id], var.vpc_security_group_ids))
64+
vpc_security_group_ids = length(var.network_interfaces) > 0 ? [] : local.security_group_ids
6365

6466
default_version = var.launch_template_default_version
6567
update_default_version = var.update_launch_template_default_version
@@ -203,13 +205,14 @@ resource "aws_launch_template" "this" {
203205
delete_on_termination = lookup(network_interfaces.value, "delete_on_termination", null)
204206
description = lookup(network_interfaces.value, "description", null)
205207
device_index = lookup(network_interfaces.value, "device_index", null)
206-
ipv4_addresses = lookup(network_interfaces.value, "ipv4_addresses", null) != null ? network_interfaces.value.ipv4_addresses : []
208+
interface_type = lookup(network_interfaces.value, "interface_type", null)
209+
ipv4_addresses = try(network_interfaces.value.ipv4_addresses, [])
207210
ipv4_address_count = lookup(network_interfaces.value, "ipv4_address_count", null)
208-
ipv6_addresses = lookup(network_interfaces.value, "ipv6_addresses", null) != null ? network_interfaces.value.ipv6_addresses : []
211+
ipv6_addresses = try(network_interfaces.value.ipv6_addresses, [])
209212
ipv6_address_count = lookup(network_interfaces.value, "ipv6_address_count", null)
210213
network_interface_id = lookup(network_interfaces.value, "network_interface_id", null)
211214
private_ip_address = lookup(network_interfaces.value, "private_ip_address", null)
212-
security_groups = lookup(network_interfaces.value, "security_groups", null) != null ? network_interfaces.value.security_groups : []
215+
security_groups = compact(concat(try(network_interfaces.value.security_groups, []), local.security_group_ids))
213216
subnet_id = lookup(network_interfaces.value, "subnet_id", null)
214217
}
215218
}

0 commit comments

Comments
 (0)