Skip to content

Commit

Permalink
Showing Terraform outputs as "global" variables in the Ansible dynami…
Browse files Browse the repository at this point in the history
…c inventory json.
  • Loading branch information
Lazar Travica committed Feb 16, 2016
1 parent 2292023 commit 6ead28e
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 6 deletions.
15 changes: 11 additions & 4 deletions cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,26 @@ import (
)

func cmdList(stdout io.Writer, stderr io.Writer, s *state) int {
groups := make(map[string][]string, 0)
groups := make(map[string]interface{}, 0)
for _, res := range s.resources() {
for _, grp := range res.Groups() {
tmpGroup := []string{}

_, ok := groups[grp]
if !ok {
groups[grp] = []string{}
if ok {
tmpGroup = groups[grp].([]string)
}

groups[grp] = append(groups[grp], res.Address())
tmpGroup = append(tmpGroup, res.Address())
groups[grp] = tmpGroup
}
}

groups["all"] = make(map[string]string, 0)
for _, out := range s.outputs() {
groups["all"].(map[string]string)[out.keyName] = out.value
}

return output(stdout, stderr, groups)
}

Expand Down
4 changes: 3 additions & 1 deletion fixtures/example.tfstate
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
"path": [
"root"
],
"outputs": {},
"outputs": {
"datacenter": "mydc"
},
"resources": {
"aws_instance.alpha.0": {
"type": "aws_instance",
Expand Down
26 changes: 26 additions & 0 deletions output.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package main

import (
"fmt"
)

type Output struct {

// The keyName and value of the output
keyName string
value string
}

func NewOutput(keyName string, value string) (*Output, error) {

// TODO: Warn instead of silently ignore error?
if len(keyName) == 0 {
return nil, fmt.Errorf("couldn't parse keyName: %s", keyName)
}

return &Output{
keyName: keyName,
value: value,
}, nil
}

16 changes: 15 additions & 1 deletion parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,20 @@ func (s *state) read(stateFile io.Reader) error {
return nil
}

// outputs returns a slice of the Outputs found in the statefile.
func (s *state) outputs() []*Output {
inst := make([]*Output, 0)

for _, m := range s.Modules {
for k, v := range m.Outputs {
o, _ := NewOutput(k, v)
inst = append(inst, o)
}
}

return inst
}

// resources returns a slice of the Resources found in the statefile.
func (s *state) resources() []*Resource {
inst := make([]*Resource, 0)
Expand All @@ -43,7 +57,6 @@ func (s *state) resources() []*Resource {
if err != nil {
continue
}

if r.IsSupported() {
inst = append(inst, r)
}
Expand All @@ -55,6 +68,7 @@ func (s *state) resources() []*Resource {

type moduleState struct {
ResourceStates map[string]resourceState `json:"resources"`
Outputs map[string]string `json:"outputs"`
}

// resourceKeys returns a sorted slice of the key names of the resources in this
Expand Down

0 comments on commit 6ead28e

Please sign in to comment.