簡體   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