This package provides utilities for properly parsing Terraform addresses.
The parser is implemented using pigeon, a PEG implementation.
Resource addresses are described by the Terraform documentation.
Identifiers are described in the Terraform Configuration Syntax document
If you change the peg, please regenerate the go code with:
go get -u github.com/mna/pigeon
go generate .
You may need to clean up the go.mod with:
go mod tidy
package main
import (
"fmt"
address "github.com/hashicorp/go-terraform-address"
)
func main() {
a, err := address.NewAddress(`module.first.module.second["xyz"].resource.name[2]`)
if err != nil {
panic(err)
}
fmt.Println(len(a.ModulePath)) // 2
fmt.Println(a.ModulePath[0].Name) // "first"
fmt.Println(a.ModulePath[1].Index.String()) // "xyz"
fmt.Printf("%T\n", a.ModulePath[1].Index.Value) // string
fmt.Println(a.ResourceSpec.Type) // "resource"
fmt.Println(a.ResourceSpec.Name) // "name"
fmt.Printf("%T\n", a.ResourceSpec.Index.Value) // int
}