首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法读取数据块中的文件

无法读取数据块中的文件
EN

Stack Overflow用户
提问于 2022-08-02 18:28:47
回答 1查看 92关注 0票数 1

我正在以下列方式生成一个文件

代码语言:javascript
复制
resource "null_resource" "clone_manifest_argocd" {
  provisioner "local-exec" {
    command = <<EOT
      echo "Clone ArgoCD main branch"
      git clone https://${var.gitlab_user}:${var.gitlab_token}@gitlab.com/org/k8s-argocd.git
      echo "Generate kustomize files for ${var.argocd_overlay} env"
      kubectl kustomize k8s-argocd/overlays/${var.argocd_overlay}/ -o /tmp/${var.argocd_overlay}.yaml
      cat /tmp/${var.argocd_overlay}.yaml
    EOT
  }
  triggers = {
    always = timestamp()
  }
}

文件总是被正确地创建和填充。

代码语言:javascript
复制
...
null_resource.clone_manifest_argocd (local-exec):     app.kubernetes.io/part-of: argocd-applicationset
null_resource.clone_manifest_argocd (local-exec):   name: argocd-applicationset-controller
null_resource.clone_manifest_argocd (local-exec): ---
null_resource.clone_manifest_argocd (local-exec): apiVersion: v1
null_resource.clone_manifest_argocd (local-exec): kind: ServiceAccount
null_resource.clone_manifest_argocd (local-exec): metadata:
null_resource.clone_manifest_argocd (local-exec):   labels:
null_resource.clone_manifest_argocd (local-exec):     app.kubernetes.io/component: dex-server
null_resource.clone_manifest_argocd (local-exec):     app.kubernetes.io/name: argocd-dex-server
null_resource.clone_manifest_argocd (local-exec):     app.kubernetes.io/part-of: argocd
null_resource.clone_manifest_argocd (local-exec):   name: argocd-dex-server
null_resource.clone_manifest_argocd (local-exec): ---
...

现在,为了部署它,我想使用kubectl提供程序。我已经设置好了

代码语言:javascript
复制
provider "kubectl" {
  load_config_file       = false
  host                   = module.eks.cluster_endpoint
  cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
  token                  = data.aws_eks_cluster_auth.eks_auth.token
}

我尝试了以下方法来获取YAML文件并部署它

代码语言:javascript
复制
data "kubectl_file_documents" "files" {
    content = file("/tmp/${var.argocd_overlay}")
}

resource "kubectl_manifest" "test" {
    for_each  = data.kubectl_file_documents.files.manifests
    yaml_body = each.value
}

我也尝试过

代码语言:javascript
复制
data "template_file" "files" {
  template = file("/tmp/${var.argocd_overlay}.yaml")
}

resource "kubectl_manifest" "public_alb" {
  yaml_body = data.template_file.files.rendered
}

但不管是哪种情况,我

代码语言:javascript
复制
│ Error: Invalid function argument
│ 
│   on main.tf line 161, in data "template_file" "public_alb":
│  161:   template = file("/tmp/${var.argocd_overlay}.yaml")
│     ├────────────────
│     │ var.argocd_overlay is "dev"
│ 
│ Invalid value for "path" parameter: no file exists at "/tmp/dev.yaml"; this
│ function works only with files that are distributed as part of the
│ configuration source code, so if this file will be created by a resource in
│ this configuration you must instead obtain this result from an attribute of
│ that resource.

这里有我缺少的东西吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-02 19:40:25

根据Terraform 文件功能文档:

此函数只能用于Terraform运行开始时磁盘上已经存在的文件。函数不参与依赖关系图,因此该函数不能与Terraform操作期间动态生成的文件一起使用。

您可能希望尝试库口化提供者,而不是动态创建文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73212151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档