0

我的 TF 脚本正在创建 k8s 资源并基于template_file.
然后我想将其传递给另一个模块(使用 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
  ]
}

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

4

1 回答 1

0

感谢评论中的@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)
  ...
}
于 2021-11-24T13:09:17.663 回答