Skip to content

Commit aab01f5

Browse files
committed
feat: allow enabling memory oversubscription in cluster
allows Memory Oversubscription to be enabled in the cluster with `enable_mem_oversubscription` set to true ref: - #8 - https://developer.hashicorp.com/nomad/tutorials/advanced-scheduling/memory-oversubscription Signed-off-by: Chinmay D. Pai <[email protected]>
1 parent e0e7000 commit aab01f5

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

modules/nomad-servers/launch_template.tf

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ resource "aws_launch_template" "nomad_server" {
99
update_default_version = true
1010

1111
user_data = base64encode(templatefile("${path.module}/scripts/setup_server.tftpl.sh", {
12-
nomad_acl_bootstrap_token = var.nomad_acl_bootstrap_token
13-
nomad_acl_enable = var.nomad_acl_enable
14-
enable_tls = var.enable_tls
15-
tls_certificates = var.tls_certificates
16-
tls_http_enable = var.tls_http_enable
17-
tls_rpc_enable = var.tls_rpc_enable
12+
nomad_acl_bootstrap_token = var.nomad_acl_bootstrap_token
13+
nomad_acl_enable = var.nomad_acl_enable
14+
enable_mem_oversubscription = var.enable_mem_oversubscription
15+
enable_tls = var.enable_tls
16+
tls_certificates = var.tls_certificates
17+
tls_http_enable = var.tls_http_enable
18+
tls_rpc_enable = var.tls_rpc_enable
1819
nomad_server_cfg = templatefile("${path.module}/templates/nomad.tftpl", {
1920
nomad_dc = var.cluster_name
2021
aws_region = var.aws_region

modules/nomad-servers/scripts/setup_server.tftpl.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,34 @@ bootstrap_acl() {
165165
fi
166166
}
167167

168+
enable_mem_oversubscription() {
169+
command -v jq >/dev/null 2>&1 || { log "ERROR" "jq not found in PATH. Aborting."; exit 1; }
170+
171+
local nomad_config
172+
nomad_config=$(curl -s http://0.0.0.0:4646/v1/operator/scheduler/configuration %{ if "${nomad_acl_bootstrap_token}" != "" }-H "X-Nomad-Token: ${nomad_acl_bootstrap_token}"%{ endif })
173+
if [[ "$nomad_config" == *"Permission denied"* ]]; then
174+
log "ERROR" "Permission denied while enabling memory oversubscription. Please check the bootstrap token."
175+
else
176+
log "INFO" "Checking if Memory Over subscription is already enabled."
177+
mem_oversub_enabled=$(echo "$nomad_config" | jq '.SchedulerConfig | .MemoryOversubscriptionEnabled')
178+
if [ "$mem_oversub_enabled" == "false" ]; then
179+
log "INFO" "Memory Oversubscription is disabled. Enabling."
180+
echo "$nomad_config" | \
181+
status_code=(jq '.SchedulerConfig | .MemoryOversubscriptionEnabled=true' | \
182+
curl -s -X PUT --write-out %%{http_code} \
183+
%{ if "${nomad_acl_bootstrap_token}" != "" }-H "X-Nomad-Token: ${nomad_acl_bootstrap_token}"%{ endif } \
184+
http://0.0.0.0:4646/v1/operator/scheduler/configuration -d @-)
185+
if [ "$status_code" == "200" ]; then
186+
log "INFO" "Successfully enabled Memory Oversubscription!"
187+
else
188+
log "ERROR" "Something went wrong while updating memory oversubscription. Please run it manually."
189+
fi
190+
else
191+
log "INFO" "Memory Oversubscription is already enabled!"
192+
fi
193+
fi
194+
}
195+
168196
log "INFO" "Fetching EC2 Tags from AWS"
169197
store_tags
170198
@@ -195,4 +223,9 @@ log "INFO" "Skipping ACL Bootstrap for Nomad as 'nomad_acl_enable' is not set to
195223
log "INFO" "Restarting services"
196224
restart_nomad
197225
226+
%{ if enable_memory_oversubscription }
227+
log "INFO" "Enabling Memory Oversubscription for the cluster"
228+
enable_mem_oversubscription
229+
%{ endif }
230+
198231
log "INFO" "Finished server initializing process! Enjoy Nomad!"

modules/nomad-servers/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ variable "ebs_encryption" {
8181
default = true
8282
}
8383

84+
variable "enable_mem_oversubscription" {
85+
description = "Whether to enable Memory Oversubscription on the cluster"
86+
type = bool
87+
default = false
88+
}
89+
8490
variable "enable_tls" {
8591
description = "Whether to enable TLS on client nodes"
8692
type = bool

0 commit comments

Comments
 (0)