51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
// This is a minimal implementation of the external data source protocol
|
||
|
// intended only for use in the provider acceptance tests.
|
||
|
//
|
||
|
// In practice it's likely not much harder to just write a real Terraform
|
||
|
// plugin if you're going to be writing your data source in Go anyway;
|
||
|
// this example is just in Go because we want to avoid introducing
|
||
|
// additional language runtimes into the test environment.
|
||
|
func main() {
|
||
|
queryBytes, err := ioutil.ReadAll(os.Stdin)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
var query map[string]string
|
||
|
err = json.Unmarshal(queryBytes, &query)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
if query["fail"] != "" {
|
||
|
fmt.Fprintf(os.Stderr, "I was asked to fail\n")
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
|
||
|
var result = map[string]string{
|
||
|
"result": "yes",
|
||
|
"query_value": query["value"],
|
||
|
}
|
||
|
|
||
|
if len(os.Args) >= 2 {
|
||
|
result["argument"] = os.Args[1]
|
||
|
}
|
||
|
|
||
|
resultBytes, err := json.Marshal(result)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
os.Stdout.Write(resultBytes)
|
||
|
os.Exit(0)
|
||
|
}
|