1
1
mirror of https://github.com/adammck/terraform-inventory synced 2024-11-26 11:53:48 +01:00
terraform-inventory/parser.go
Mark Bainter ff15699be0 Add support for environment variables
This change is really overkill for just defining the state path.
However, this opens the door for additional configuration options
such as choosing the keys to match on for the "host" argument.
2015-05-27 17:22:37 -05:00

62 lines
1.2 KiB
Go

package main
import (
"encoding/json"
"io"
"io/ioutil"
"strings"
)
type state struct {
Modules []moduleState `json:"modules"`
}
// read populates the state object from a statefile.
func (s *state) read(stateFile io.Reader) error {
// read statefile contents
b, err := ioutil.ReadAll(stateFile)
if err != nil {
return err
}
// parse into struct
err = json.Unmarshal(b, s)
if err != nil {
return err
}
return nil
}
// hosts returns a map of name to instanceState, for each of the aws_instance
// resources found in the statefile.
func (s *state) instances() map[string]instanceState {
inst := make(map[string]instanceState)
for _, m := range s.Modules {
for k, r := range m.Resources {
if r.Type == "aws_instance" {
name := strings.TrimPrefix(k, "aws_instance.")
inst[name] = r.Primary
}
}
}
return inst
}
type moduleState struct {
Resources map[string]resourceState `json:"resources"`
}
type resourceState struct {
Type string `json:"type"`
Primary instanceState `json:"primary"`
}
type instanceState struct {
ID string `json:"id"`
Attributes map[string]string `json:"attributes,omitempty"`
}