繁体   English   中英

无法解析 GitHub 操作 Terraform 状态文件

[英]GitHub Actions Terraform State file cant be parsed

我目前正在使用 terraform 在云中配置基础设施。 在 Terraform 之上,我运行 GitHub Actions 来自动化更多步骤。

在这种情况下,在配置基础设施后,我使用生成的 cluster.tfstate 来解析名称和 ip,使用 bash 脚本生成一个清单文件(用于 ansible)。

但是脚本无法运行,因为它会引发以下错误

Run bash ./generate-inventory.sh cluster.tfstate > ../hosts.ini
parse error: Invalid numeric literal at line 1, column 9
Error: Process completed with exit code 4.

但是在本地运行它是有效的。 当我在工作流中的 cluster.tfstate 上做猫时,情况如下

Run cat cluster.tfstate
***
  "version": 4,
  "terraform_version": "1.0.1",
  "serial": 386,
  "lineage": "3d16a659-b093-551c-b3ab-a1cf8aa5031c",
  "outputs": ***
    "master_ip_addresses": ***
      "value": ***

GitHub Actions 是否会因为我创建的 Secrets 而修改由我的脚本评估的 json? 或者星星只在shell的输出中?

工作流的代码可以在这里看到https://github.com/eco-bench/eco-bench/blob/main/.github/workflows/terraform.yml

谢谢!

以下是诀窍

source "local_file" "AnsibleInventory" {

  content = templatefile("inventory.tmpl",
    {
      worker = {
      for key, instance in google_compute_instance.worker :
      instance.name => instance.network_interface.0.access_config.0.nat_ip
      }
      master = {
      for key, instance in google_compute_instance.master :
      instance.name => instance.network_interface.0.access_config.0.nat_ip
      }
    }
  )
  filename = "./inventory.ini"
}

模板看起来像这样

[all:vars]
ansible_connection=ssh
ansible_user=lucas

[cloud]
%{ for ip in master ~}
${name} ${ip}
%{ endfor ~}

[edge]
%{ for ip in worker ~}
${ip}
%{ endfor ~}

[cloud:vars]
kubernetes_role=master

[edge:vars]
kubernetes_role=edge

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM