我的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)
...
}