diff --git a/README.md b/README.md index f6f62991fc..c57a21735a 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ MIT Licensed. See [LICENSE](https://github.com/terraform-aws-modules/terraform-a | local | >= 1.4 | | null | >= 2.1 | | random | >= 2.1 | +| template | >= 2.1 | ## Providers @@ -150,6 +151,7 @@ MIT Licensed. See [LICENSE](https://github.com/terraform-aws-modules/terraform-a | local | >= 1.4 | | null | >= 2.1 | | random | >= 2.1 | +| template | >= 2.1 | ## Inputs diff --git a/data.tf b/data.tf index c96be64322..03cb35fec1 100644 --- a/data.tf +++ b/data.tf @@ -55,94 +55,96 @@ data "aws_iam_policy_document" "cluster_assume_role_policy" { } } -locals { - userdata = [for worker in var.worker_groups : templatefile( - lookup( - worker, - "userdata_template_file", - lookup(worker, "platform", local.workers_group_defaults["platform"]) == "windows" +data "template_file" "userdata" { + count = var.create_eks ? local.worker_group_count : 0 + template = lookup( + var.worker_groups[count.index], + "userdata_template_file", + file( + lookup(var.worker_groups[count.index], "platform", local.workers_group_defaults["platform"]) == "windows" ? "${path.module}/templates/userdata_windows.tpl" : "${path.module}/templates/userdata.sh.tpl" - ), - merge( - { - platform = lookup(worker, "platform", local.workers_group_defaults["platform"]) - cluster_name = aws_eks_cluster.this[0].name - endpoint = aws_eks_cluster.this[0].endpoint - cluster_auth_base64 = aws_eks_cluster.this[0].certificate_authority[0].data - pre_userdata = lookup( - worker, - "pre_userdata", - local.workers_group_defaults["pre_userdata"], - ) - additional_userdata = lookup( - worker, - "additional_userdata", - local.workers_group_defaults["additional_userdata"], - ) - bootstrap_extra_args = lookup( - worker, - "bootstrap_extra_args", - local.workers_group_defaults["bootstrap_extra_args"], - ) - kubelet_extra_args = lookup( - worker, - "kubelet_extra_args", - local.workers_group_defaults["kubelet_extra_args"], - ) - }, - lookup( - worker, - "userdata_template_extra_args", - local.workers_group_defaults["userdata_template_extra_args"] - ) ) - ) if var.create_eks - ] + ) - launch_template_userdata = [for worker in var.worker_groups_launch_template : templatefile( + vars = merge({ + platform = lookup(var.worker_groups[count.index], "platform", local.workers_group_defaults["platform"]) + cluster_name = aws_eks_cluster.this[0].name + endpoint = aws_eks_cluster.this[0].endpoint + cluster_auth_base64 = aws_eks_cluster.this[0].certificate_authority[0].data + pre_userdata = lookup( + var.worker_groups[count.index], + "pre_userdata", + local.workers_group_defaults["pre_userdata"], + ) + additional_userdata = lookup( + var.worker_groups[count.index], + "additional_userdata", + local.workers_group_defaults["additional_userdata"], + ) + bootstrap_extra_args = lookup( + var.worker_groups[count.index], + "bootstrap_extra_args", + local.workers_group_defaults["bootstrap_extra_args"], + ) + kubelet_extra_args = lookup( + var.worker_groups[count.index], + "kubelet_extra_args", + local.workers_group_defaults["kubelet_extra_args"], + ) + }, lookup( - worker, - "userdata_template_file", - lookup(worker, "platform", local.workers_group_defaults["platform"]) == "windows" + var.worker_groups[count.index], + "userdata_template_extra_args", + local.workers_group_defaults["userdata_template_extra_args"] + ) + ) +} + +data "template_file" "launch_template_userdata" { + count = var.create_eks ? local.worker_group_launch_template_count : 0 + template = lookup( + var.worker_groups_launch_template[count.index], + "userdata_template_file", + file( + lookup(var.worker_groups_launch_template[count.index], "platform", local.workers_group_defaults["platform"]) == "windows" ? "${path.module}/templates/userdata_windows.tpl" : "${path.module}/templates/userdata.sh.tpl" - ), - merge( - { - platform = lookup(worker, "platform", local.workers_group_defaults["platform"]) - cluster_name = aws_eks_cluster.this[0].name - endpoint = aws_eks_cluster.this[0].endpoint - cluster_auth_base64 = aws_eks_cluster.this[0].certificate_authority[0].data - pre_userdata = lookup( - worker, - "pre_userdata", - local.workers_group_defaults["pre_userdata"], - ) - additional_userdata = lookup( - worker, - "additional_userdata", - local.workers_group_defaults["additional_userdata"], - ) - bootstrap_extra_args = lookup( - worker, - "bootstrap_extra_args", - local.workers_group_defaults["bootstrap_extra_args"], - ) - kubelet_extra_args = lookup( - worker, - "kubelet_extra_args", - local.workers_group_defaults["kubelet_extra_args"], - ) - }, - lookup( - worker, - "userdata_template_extra_args", - local.workers_group_defaults["userdata_template_extra_args"] - ) ) - ) if var.create_eks - ] + ) + + vars = merge({ + platform = lookup(var.worker_groups_launch_template[count.index], "platform", local.workers_group_defaults["platform"]) + cluster_name = aws_eks_cluster.this[0].name + endpoint = aws_eks_cluster.this[0].endpoint + cluster_auth_base64 = aws_eks_cluster.this[0].certificate_authority[0].data + pre_userdata = lookup( + var.worker_groups_launch_template[count.index], + "pre_userdata", + local.workers_group_defaults["pre_userdata"], + ) + additional_userdata = lookup( + var.worker_groups_launch_template[count.index], + "additional_userdata", + local.workers_group_defaults["additional_userdata"], + ) + bootstrap_extra_args = lookup( + var.worker_groups_launch_template[count.index], + "bootstrap_extra_args", + local.workers_group_defaults["bootstrap_extra_args"], + ) + kubelet_extra_args = lookup( + var.worker_groups_launch_template[count.index], + "kubelet_extra_args", + local.workers_group_defaults["kubelet_extra_args"], + ) + }, + lookup( + var.worker_groups_launch_template[count.index], + "userdata_template_extra_args", + local.workers_group_defaults["userdata_template_extra_args"] + ) + ) } data "aws_iam_role" "custom_cluster_iam_role" { diff --git a/outputs.tf b/outputs.tf index 8ec702f359..029ecff6e7 100644 --- a/outputs.tf +++ b/outputs.tf @@ -92,8 +92,8 @@ output "workers_asg_names" { output "workers_user_data" { description = "User data of worker groups" value = concat( - local.userdata, - local.launch_template_userdata, + data.template_file.userdata.*.rendered, + data.template_file.launch_template_userdata.*.rendered, ) } diff --git a/versions.tf b/versions.tf index 21e74d2e97..64f92a5d23 100644 --- a/versions.tf +++ b/versions.tf @@ -5,6 +5,7 @@ terraform { aws = ">= 2.52.0" local = ">= 1.4" null = ">= 2.1" + template = ">= 2.1" random = ">= 2.1" kubernetes = ">= 1.11.1" } diff --git a/workers.tf b/workers.tf index a1908b7391..2eed088c4f 100644 --- a/workers.tf +++ b/workers.tf @@ -170,7 +170,7 @@ resource "aws_launch_configuration" "workers" { "key_name", local.workers_group_defaults["key_name"], ) - user_data_base64 = base64encode(local.userdata[count.index]) + user_data_base64 = base64encode(data.template_file.userdata.*.rendered[count.index]) ebs_optimized = lookup( var.worker_groups[count.index], "ebs_optimized", diff --git a/workers_launch_template.tf b/workers_launch_template.tf index bdf1efdfb0..69e4f465ca 100644 --- a/workers_launch_template.tf +++ b/workers_launch_template.tf @@ -262,7 +262,7 @@ resource "aws_launch_template" "workers_launch_template" { local.workers_group_defaults["key_name"], ) user_data = base64encode( - local.launch_template_userdata[count.index], + data.template_file.launch_template_userdata.*.rendered[count.index], ) ebs_optimized = lookup(