go 获取terraform output输出

发布于:2024-04-12 ⋅ 阅读:(62) ⋅ 点赞:(0)

在Go中,你可以使用os/exec包来运行外部命令,如Terraform。以下是一个简单的Go函数,用于获取Terraform输出并打印它们:

package main
 
import (
    "bytes"
    "fmt"
    "os/exec"
)
 
func getTerraformOutputs(path string) (map[string]string, error) {
    cmd := exec.Command("terraform", "output", "-json")
    cmd.Dir = path
    var out bytes.Buffer
    cmd.Stdout = &out
    err := cmd.Run()
    if err != nil {
        return nil, err
    }
 
    type output struct {
        Sensitive bool   `json:"sensitive"`
        Type      string `json:"type"`
        Value     string `json:"value"`
    }
 
    type outputs map[string]output
 
    var result outputs
    err = json.Unmarshal(out.Bytes(), &result)
    if err != nil {
        return nil, err
    }
 
    outputMap := make(map[string]string)
    for k, v := range result {
        outputMap[k] = v.Value
    }
 
    return outputMap, nil
}
 
func main() {
    outputs, err := getTerraformOutputs("/path/to/terraform/module")
    if err != nil {
        fmt.Println("Error getting Terraform outputs:", err)
        return
    }
 
    for k, v := range outputs {
        fmt.Printf("Output %s: %s\n", k, v)
    }
}

确保你有Terraform安装并配置在你的系统PATH中。此代码段假设你的Terraform状态是已经plan和apply的,因此它可以获取输出。你需要修改path变量以指向你的Terraform模块的正确路径。这个函数运行terraform output -json命令,解析JSON输出,并将结果作为Go字典返回。