Terraform-在循环中的模块之间创建和传递文件



我的TF脚本正在创建k8s资源,并基于template_file生成kubeconfig文件
然后我想将其传递给另一个模块(该模块使用GitLab提供程序-将它们保存为GitLab变量(。

到目前为止,我只创建了一个kubconfig,方法非常简单:

data "template_file" "kubeconfig_template" {
template = "${file("${path.module}/templates/kubeconfig.tpl")}"
vars     = {...}
}
output "kubeconfig" {
value = data.template_file.kubeconfig_template.rendered
}

然后用传递到GitLab模块

module "gitlab" {
source = "./gitlab"
kubeconfig = module.kubernetes.kubeconfig
}

并用作:

resource "gitlab_group_variable" "kubeconfig_var" {
value     = base64encode(var.kubeconfig)
...
}

但是如何对多个文件实现相同的功能呢

我看到count也适用于数据,所以我可以定义:

data "template_file" "kubeconfig_templates" {
count    = length(var.namespaces)
template = "${file("${path.module}/templates/kubeconfig.tpl")}"
vars     = {...}
}

但是output不支持count;花式;强制循环的解决方法似乎不起作用:

output "kubeconfigs" {
value = [
for namespace in var.namespaces :
data.template_file.kubeconfig_templates[index(var.namespaces, namespace)].rendered
]
}

你知道如何处理这样的话题吗?

感谢@patric从评论中输入,我已经切换到了"template_file"至";local_file"这解决了我的问题。

新形式:

resource "local_file" "kubeconfigs" {
count    = length(var.namespaces)
filename = "${var.namespaces[count.index].name}_kubeconfig"
content = templatefile("${path.module}/templates/kubeconfig.tpl", {
...
})
}
output "generated_kubeconfigs" {
value = local_file.kubeconfigs
}

传递到GitLab模块:

module "gitlab" {
source = "./gitlab"
kubeconfigs = concat(module.kubernetes_dev.generated_kubeconfigs,
module.kubernetes_stg.generated_kubeconfigs)
}

并用作:

resource "gitlab_group_variable" "group_variables_kubeconfigs" {
count = length(var.kubeconfigs)
value = base64encode(var.kubeconfigs[count.index].content)
...
}

相关内容

  • 没有找到相关文章

最新更新