第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HCL 解碼:具有多個標簽的塊

HCL 解碼:具有多個標簽的塊

Go
肥皂起泡泡 2022-12-13 11:13:03
我的目標是解析一個 HCL 配置(Terraform Configuration),然后將收集到的有關變量、輸出、資源塊和數(shù)據(jù)塊的數(shù)據(jù)寫入 Markdown 文件。然而,一旦我嘗試解碼具有多個標簽的資源塊,變量和輸出就沒有問題。作品:variable "foo" {  type = "bar"}不起作用:resource "foo" "bar" { name = "biz"}錯誤:Extraneous label for resource; Only 1 labels (name) are expected for resource blocks. 類型聲明代碼:import (    "log"    "os"    "strconv"    "github.com/hashicorp/hcl/v2"    "github.com/hashicorp/hcl/v2/gohcl"    "github.com/hashicorp/hcl/v2/hclsyntax")type Variable struct {    Name        string         `hcl:",label"`    Description string         `hcl:"description,optional"`    Sensitive   bool           `hcl:"sensitive,optional"`    Type        *hcl.Attribute `hcl:"type,optional"`    Default     *hcl.Attribute `hcl:"default,optional"`    Options     hcl.Body       `hcl:",remain"`}type Output struct {    Name        string   `hcl:",label"`    Description string   `hcl:"description,optional"`    Sensitive   bool     `hcl:"sensitive,optional"`    Value       string   `hcl:"value,optional"`    Options     hcl.Body `hcl:",remain"`}type Resource struct {    Name    string   `hcl:"name,label"`    Options hcl.Body `hcl:",remain"`}type Data struct {    Name    string   `hcl:"name,label"`    Options hcl.Body `hcl:",remain"`}type Config struct {    Outputs   []*Output   `hcl:"output,block"`    Variables []*Variable `hcl:"variable,block"`    Resources []*Resource `hcl:"resource,block"`    Data      []*Data     `hcl:"data,block"`}解碼代碼:func createDocs(hclPath string) map[string][]map[string]string {    var variables, outputs []map[string]string    parsedConfig := make(map[string][]map[string]string)    hclConfig := make(map[string][]byte)    c := &Config{}    // Iterate all Terraform files and safe the contents in the hclConfig map    for _, file := range filesInDirectory(hclPath, ".tf") {        fileContent, err := os.ReadFile(hclPath + "/" + file.Name())        if err != nil {            log.Fatal(err)        }        hclConfig[file.Name()] = fileContent    }問題:如何從資源塊中解析多個標簽?
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經(jīng)驗 獲得超12個贊

您共享的錯誤是由于type Resource. resourceTerraform 中的塊(和data塊)需要兩個標簽,指示資源類型和名稱。要將您暗示的模式與這些結構類型相匹配,您需要定義標記為的字段label:


type Resource struct {

    Type    string   `hcl:"type,label"`

    Name    string   `hcl:"name,label"`

    Options hcl.Body `hcl:",remain"`

}


type Data struct {

    Type    string   `hcl:"type,label"`

    Name    string   `hcl:"name,label"`

    Options hcl.Body `hcl:",remain"`

}

雖然這應該適用于您在此處顯示的有限輸入,但我要提醒您,您正在使用更高級別的gohclAPI,它只能解碼 HCL 的一個子集,該子集很好地映射到 Go 的結構類型。hcl.BodyTerraform 本身直接使用了和的底層 API hcl.Expression,這使得 Terraform 語言可以包含一些gohclAPI 無法直接表示的 HCL 特性。

根據(jù)您的目標,您可能會發(fā)現(xiàn)使用官方庫更好terraform-config-inspect,它可以在比 HCL API 本身更高的抽象級別上解析、解碼和描述 Terraform 語言的子集。它還支持為 Terraform 版本編寫的模塊,一直追溯到 Terraform v0.11,并且是支持Terraform Registry完成的模塊分析的實現(xiàn)。


查看完整回答
反對 回復 2022-12-13
  • 1 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號