blob: b4713e1a721f999ed75a333f58ad47b34e494d73 [file] [log] [blame] [view]
[![PkgGoDev](https://pkg.go.dev/badge/github.com/hashicorp/terraform-exec)](https://pkg.go.dev/github.com/hashicorp/terraform-exec)
# terraform-exec
A Go module for constructing and running [Terraform](https://terraform.io) CLI commands. Structured return values use the data types defined in [terraform-json](https://github.com/hashicorp/terraform-json).
The [Terraform Plugin SDK](https://github.com/hashicorp/terraform-plugin-sdk) is the canonical Go interface for Terraform plugins using the gRPC protocol. This library is intended for use in Go programs that make use of Terraform's other interface, the CLI. Importing this library is preferable to importing `github.com/hashicorp/terraform/command`, because the latter is not intended for use outside Terraform Core.
## Usage
The `Terraform` struct must be initialised with `NewTerraform(workingDir, execPath)`.
Top-level Terraform commands each have their own function, which will return either `error` or `(T, error)`, where `T` is a `terraform-json` type.
### Example
```go
package main
import (
"context"
"fmt"
"io/ioutil"
"os"
"github.com/hashicorp/terraform-exec/tfexec"
"github.com/hashicorp/terraform-exec/tfinstall"
)
func main() {
tmpDir, err := ioutil.TempDir("", "tfinstall")
if err != nil {
panic(err)
}
defer os.RemoveAll(tmpDir)
execPath, err := tfinstall.Find(tfinstall.LatestVersion(tmpDir, false))
if err != nil {
panic(err)
}
workingDir := "/path/to/working/dir"
tf, err := tfexec.NewTerraform(workingDir, execPath)
if err != nil {
panic(err)
}
err = tf.Init(context.Background(), tfexec.Upgrade(true), tfexec.LockTimeout("60s"))
if err != nil {
panic(err)
}
state, err := tf.Show(context.Background())
if err != nil {
panic(err)
}
fmt.Println(state.FormatVersion) // "0.1"
}
```