Open MarcMeszaros opened 3 years ago
By default use_ssm = false. This causes template rendering to fail (in terraform v0.15.0+ at least).
use_ssm = false
v0.15.0+
│ Error: Error in function call │ │ on .terraform/modules/wireguard/main.tf line 58, in resource "aws_launch_configuration" "wireguard_launch_config": │ 58: user_data = templatefile("${path.module}/templates/user-data.txt", { │ 59: wg_server_private_key = var.use_ssm ? "AWS_SSM_PARAMETER" : var.wg_server_private_key, │ 60: wg_server_private_key_aws_ssm_name = var.use_ssm ? aws_ssm_parameter.wireguard_server_private_key[0].name : null, │ 61: wg_server_net = var.wg_server_net, │ 62: wg_server_port = var.wg_server_port, │ 63: peers = join("\n", data.template_file.wg_client_data_json.*.rendered), │ 64: use_eip = var.use_eip ? "enabled" : "disabled", │ 65: eip_id = aws_eip.wireguard.id, │ 66: use_ssm = var.use_ssm ? "true" : "false", │ 67: wg_server_interface = var.wg_server_interface │ 68: }) │ ├──────────────── │ │ aws_eip.wireguard.id is "eipalloc-2fb2cd18" │ │ aws_ssm_parameter.wireguard_server_private_key is empty tuple │ │ data.template_file.wg_client_data_json is tuple with 1 element │ │ path.module is ".terraform/modules/wireguard" │ │ var.use_eip is false │ │ var.use_ssm is false │ │ var.wg_server_interface is "eth0" │ │ var.wg_server_net is "172.25.5.0/24" │ │ var.wg_server_port is 51820 │ │ var.wg_server_private_key is "<redacted>" │ │ Call to function "templatefile" failed: │ .terraform/modules/wireguard/templates/user-data.txt:60,47-81: Invalid │ template interpolation value; The expression result is null. Cannot include │ a null value in a string template., and 1 other diagnostic(s).
Use empty string instead of null when passing in template variables even if the variable isn't actually used in the user-data script.
null
user_data = templatefile("${path.module}/templates/user-data.txt", { wg_server_private_key = var.use_ssm ? "AWS_SSM_PARAMETER" : var.wg_server_private_key, wg_server_private_key_aws_ssm_name = var.use_ssm ? aws_ssm_parameter.wireguard_server_private_key[0].name : "", wg_server_net = var.wg_server_net, wg_server_port = var.wg_server_port, peers = join("\n", data.template_file.wg_client_data_json.*.rendered), use_eip = var.use_eip ? "enabled" : "disabled", eip_id = aws_eip.wireguard.id, use_ssm = var.use_ssm ? "true" : "false", wg_server_interface = var.wg_server_interface })
By default
use_ssm = false
. This causes template rendering to fail (in terraformv0.15.0+
at least).Solution
Use empty string instead of
null
when passing in template variables even if the variable isn't actually used in the user-data script.