mirror of
https://github.com/adammck/terraform-inventory
synced 2024-11-22 20:01:58 +01:00
Merge pull request #30 from lazartravica/master
Showing Terraform outputs as "global" variables
This commit is contained in:
commit
9debcb4a47
57
cli.go
57
cli.go
@ -6,8 +6,8 @@ import (
|
||||
"io"
|
||||
)
|
||||
|
||||
func gatherResources(s *state) map[string][]string {
|
||||
groups := make(map[string][]string, 0)
|
||||
func gatherResources(s *state) map[string]interface{} {
|
||||
groups := make(map[string]interface{}, 0)
|
||||
for _, res := range s.resources() {
|
||||
for _, grp := range res.Groups() {
|
||||
|
||||
@ -16,10 +16,17 @@ func gatherResources(s *state) map[string][]string {
|
||||
groups[grp] = []string{}
|
||||
}
|
||||
|
||||
groups[grp] = append(groups[grp], res.Address())
|
||||
groups[grp] = append(groups[grp].([]string), res.Address())
|
||||
}
|
||||
}
|
||||
return groups
|
||||
|
||||
if len(s.outputs()) > 0 {
|
||||
groups["all"] = make(map[string]string, 0)
|
||||
for _, out := range s.outputs() {
|
||||
groups["all"].(map[string]string)[out.keyName] = out.value
|
||||
}
|
||||
}
|
||||
return groups
|
||||
}
|
||||
|
||||
func cmdList(stdout io.Writer, stderr io.Writer, s *state) int {
|
||||
@ -27,32 +34,32 @@ func cmdList(stdout io.Writer, stderr io.Writer, s *state) int {
|
||||
}
|
||||
|
||||
func cmdInventory(stdout io.Writer, stderr io.Writer, s *state) int {
|
||||
groups := gatherResources(s)
|
||||
for group, res := range groups {
|
||||
groups := gatherResources(s)
|
||||
for group, res := range groups {
|
||||
|
||||
_, err := io.WriteString(stdout, "["+group+"]\n")
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "Error writing Invetory: %s\n", err)
|
||||
return 1;
|
||||
}
|
||||
_, err := io.WriteString(stdout, "["+group+"]\n")
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "Error writing Invetory: %s\n", err)
|
||||
return 1
|
||||
}
|
||||
|
||||
for _, ress := range res {
|
||||
for _, ress := range res.([]string) {
|
||||
|
||||
_, err := io.WriteString(stdout, ress + "\n")
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "Error writing Invetory: %s\n", err)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
_, err := io.WriteString(stdout, ress+"\n")
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "Error writing Invetory: %s\n", err)
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
_, err = io.WriteString(stdout, "\n")
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "Error writing Invetory: %s\n", err)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
_, err = io.WriteString(stdout, "\n")
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "Error writing Invetory: %s\n", err)
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0
|
||||
}
|
||||
|
||||
func cmdHost(stdout io.Writer, stderr io.Writer, s *state, hostname string) int {
|
||||
|
@ -6,7 +6,9 @@
|
||||
"path": [
|
||||
"root"
|
||||
],
|
||||
"outputs": {},
|
||||
"outputs": {
|
||||
"datacenter": "mydc"
|
||||
},
|
||||
"resources": {
|
||||
"aws_instance.alpha.0": {
|
||||
"type": "aws_instance",
|
||||
|
@ -1,5 +1,5 @@
|
||||
- hosts:
|
||||
- web-aws
|
||||
- web-do
|
||||
- alpha
|
||||
- beta
|
||||
tasks:
|
||||
- command: "echo Hello, world!"
|
||||
|
25
output.go
Normal file
25
output.go
Normal file
@ -0,0 +1,25 @@
|
||||
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
parser.go
16
parser.go
@ -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)
|
||||
@ -43,7 +57,6 @@ func (s *state) resources() []*Resource {
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if r.IsSupported() {
|
||||
inst = append(inst, r)
|
||||
}
|
||||
@ -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
|
||||
|
@ -18,7 +18,9 @@ const exampleStateFile = `
|
||||
"path": [
|
||||
"root"
|
||||
],
|
||||
"outputs": {},
|
||||
"outputs": {
|
||||
"datacenter": "mydc"
|
||||
},
|
||||
"resources": {
|
||||
"aws_instance.one.0": {
|
||||
"type": "aws_instance",
|
||||
@ -122,6 +124,7 @@ const exampleStateFile = `
|
||||
|
||||
const expectedListOutput = `
|
||||
{
|
||||
"all": {"datacenter": "mydc"},
|
||||
"one": ["10.0.0.1", "10.0.1.1"],
|
||||
"two": ["50.0.0.1"],
|
||||
"three": ["192.168.0.3"],
|
||||
|
Loading…
Reference in New Issue
Block a user